如何在MongoDB中的$match中使用聚合运算符(例如$year或$dayOfMonth)?
我拥有一个包含create_date属性的文档的集合.我想通过汇总管道发送这些文件,对他们做一些工作.理想情况下,我想在使用$match进行任何其他工作之前使用$match进行过滤,以便我可以利用索引,但是我无法弄清楚如何在我的新的$year / $month / $dayOfMonth操作符中使用$match表达式.
有一些例子浮动了如何在$项目操作中使用运算符,但我担心,通过将$项目作为我的管道中的第一步,我没有访问我的索引(MongoDB文档表明第一个表达式必须是$match以利用索引).
样品数据:
{ post_body: 'This is the body of test post 1', created_date: ISODate('2012-09-29T05:23:41Z') comments: 48 } { post_body: 'This is the body of test post 2', created_date: ISODate('2012-09-24T12:34:13Z') comments: 10 } { post_body: 'This is the body of test post 3', created_date: ISODate('2012-08-16T12:34:13Z') comments: 10 }
我想通过一个汇总管道运行它,以获得9月份所有帖子的总评论
{ aggregate: 'posts', pipeline: [ {$match: /*Can I use the $year/$month operators here to match Sept 2012? $year:created_date : 2012, $month:created_date : 9 */ /*or does this have to be created_date : {$gte:{$date:'2012-09-01T04:00:00Z'}, $lt: {$date:'2012-10-01T04:00:00Z'} } */ }, {$group: {_id: '0', totalComments:{$sum:'$comments'} } } ] }
这是有效的,但匹配失去对更复杂查询的任何索引的访问:
{ aggregate: 'posts', pipeline: [ {$project: { month : {$month:'$created_date'}, year : {$year:'$created_date'} } }, {$match: { month:9, year: 2012 } }, {$group: {_id: '0', totalComments:{$sum:'$comments'} } } ] }
如您已经找到的,您不能在文档中不匹配的字段(它的工作方式与查找工作方式完全相同),如果您首先使用$project,那么您将失去使用索引的能力.
您可以做的是将您的努力结合如下:
{ aggregate: 'posts', pipeline: [ {$match: { created_date : {$gte:{$date:'2012-09-01T04:00:00Z'}, $lt: {date:'2012-10-01T04:00:00Z'} }} } }, {$group: {_id: '0', totalComments:{$sum:'$comments'} } } ] }
以上只给出了9月的聚合,如果你想聚合多个月,你可以举个例子:
{ aggregate: 'posts', pipeline: [ {$match: { created_date : { $gte:'2012-07-01T04:00:00Z', $lt: '2012-10-01T04:00:00Z' } }, {$project: { comments: 1, new_created: { "yr" : {"$year" : "$created_date"}, "mo" : {"$month" : "$created_date"} } } }, {$group: {_id: "$new_created", totalComments:{$sum:'$comments'} } } ] }
你会得到如下结果:
{ "result" : [ { "_id" : { "yr" : 2012, "mo" : 7 }, "totalComments" : 5 }, { "_id" : { "yr" : 2012, "mo" : 8 }, "totalComments" : 19 }, { "_id" : { "yr" : 2012, "mo" : 9 }, "totalComments" : 21 } ], "ok" : 1 }
原文出处:voidcn -> http://www.voidcn.com/article/p-dbvgvcpe-btz.html
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。