MongoDb查询环回应用程序中的月比较

时间:2016-08-08 11:03:29

标签: node.js mongodb loopbackjs

我使用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"
  }
]

2 个答案:

答案 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更有效。