我想在我的mongoDB集合中获取一个值。我想得到一部电影的标题和当前这部电影的销量(nbSold)。
以下是我的数据存储方式:
"_id" : ObjectId("52e6a1aacf0b3b522a8a157a"),
"title" : "Pulp Fiction",
"sales" : [
{
"date" : ISODate("2013-11-01T00:00:00Z"),
"nbSold" : 6
},
{
"date" : ISODate("2013-12-01T00:00:00Z"),
"nbSold" : 2
}
]
我正在使用mongoose,这就是我在2013年12月构建查询的方式:
var query = Movie.find({"title":"Pulp Fiction"}, "title sales.nbSold")
.where("sales.date")
.equals(new Date("2013-12-01"));
但是,这是我收到的输出:
{ title: 'Pulp Fiction', sales: [ { nbSold: 6 }, { nbSold: 2 } ] }
我想只有与当月的nbSold相关联的标题(在我的情况下为2)。这样做的正确方法是什么?
非常感谢你的帮助。
答案 0 :(得分:0)
首先,您应该关闭where
电话。完成比较后,您应该致电.exec(callback)
,并且应该使用select
代替等号和$elemMatch
。试试这个:
var query = Movie.find({"title":"Pulp Fiction"}, "title sales.nbSold")
.where("sales.date")
.select({ sales: { $elemMatch: new Date("2013-12-01") }})
.exec(function(err, doc) {
return console.dir(doc);
});
你也应该有一个回调。 我在我的机器上运行它,它确实有用。我之前发布的代码并不完全正确,但这样就可以了。 See the documentation for an example.
另外,我会关注你如何看到日期是否匹配。如果Date
对象中的时间已关闭但日期匹配,则Mongo将找不到匹配项。我并不确切知道它在Mongo中是如何工作的,但是在JavaScript中,你不能直接比较两个Date
个对象是否相等,因为它们都是具有相同值的不同对象,所以你可能会遇到这个问题同样。 See this post for an example on how to do it.