我的文档包含嵌套文档reviews
:
{
"_id" : ObjectId("53a5753937c2f0ef6dcd9006"),
"product" : "Super Duper-o-phonic",
"price" : 11000000000,
"reviews" : [
{
"user" : "fred",
"comment" : "Great!",
"rating" : 5
},
{
"user" : "Tom",
"comment" : "Great again!",
"rating" : 5
},
{
"user" : "Tom",
"comment" : "I agree with fred somewhat",
"rating" : 4
}
]
}
我只想找到评分为5的reviews
。
最终查询应选择product
price
和reviews
为rating
的两个文档。
我尝试的最后一个查询是:
db.testData.find({'reviews':{$elemMatch:{'rating':{$gte:5}}}}).pretty()
这很奇怪,但它不起作用。
如何在mongodb中执行此操作?
答案 0 :(得分:4)
如果您只想要reviews
为rating
的{{1}}的单子文档,则可以使用$
positional projection operator来包含{的第一个元素{1}}符合您的查询:
reviews
如果您希望所有 db.test.find({'reviews.rating': 5}, {product: 1, price: 1, 'reviews.$': 1})
元素的reviews
为5(而不仅仅是第一个),您可以使用rating
代替{{1} }:
aggregate
答案 1 :(得分:0)
在这里查看:MongoDB - how to query for a nested item inside a collection?
万一你想到这个:
如果您尝试使用$elemMatch
完成此操作,则会返回第一个匹配的评论。
http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/