我使用MongoDB作为环回应用程序的数据源。因为我必须检索当月的文件。
所以我尝试了以下内容:
app.models.aaaa.count({ $where : 'return this.Date.getMonth() == 7'}, function(err, res){
});
现在我想根据年份和userId进行过滤。我该如何构建查询。
我尝试了以下内容:
app.models.aaaa.count({ $where : 'return this.Date.getMonth() == 7 && this.Date.getYear() == 2016'}, function(err, res){
});
但它只检查了一个月..请分享你的想法。提前致谢
编辑:
[
{
"aaaId": "57a84a572b9a79022198c6dd",
"bbId": "876hjg786",
"Date": "2016-08-08T00:00:00.000Z",
"cccc": [
"57a1bfd0c77554fd746a538d'",
"57a1bfebc77554fd746a538f"
],
"id": "57a85e1d9841c9cb1b100f21"
},
{
"aaaId": "57a84a572b9a79022198c6dd",
"bbId": "876hjg786",
"Date": "2016-08-08T00:00:00.000Z",
"cccc": [
"57a1bfd0c77554fd746a538d'",
"57a1bfebc77554fd746a538f"
],
"id": "57a85f1d1605d9f11b4d21b3"
}
]
答案 0 :(得分:0)
这应该有效:
db.myCollection.count(
function() {
return (this.Date.getMonth() == 7 && this.Date.getYear() == 2016);
}
);
请注意,如果您只有$where
,则可以将JavaScript函数编写为.count()
参数,或者只将表达式编写为字符串,如下所示:
db.myCollection.count("this.Date.getMonth() == 7 && this.Date.getYear() == 2016");
答案 1 :(得分:0)
对项目使用aggregation framework并匹配文档:
collection.aggregate(
{$project: {
month: {$month: "$Date"},
year: {$year: "$Date"}
}},
{$match: {month: 8, year: 2016}}
);
你会得到这样的东西:
{ "_id" : ObjectId("57a86cbe8357264ce0b55b2b"), "m" : 8, "y" : 2016 }
如果您需要原始文档中的某些字段,请在project
阶段描述它们。
使用聚合必须比使用where
更有效。