如何在mongodb中查询嵌套文档?

时间:2014-06-21 14:03:43

标签: mongodb

我的文档包含嵌套文档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 pricereviewsrating的两个文档。

我尝试的最后一个查询是:

db.testData.find({'reviews':{$elemMatch:{'rating':{$gte:5}}}}).pretty()

这很奇怪,但它不起作用。

如何在mongodb中执行此操作?

2 个答案:

答案 0 :(得分:4)

如果您只想要reviewsrating的{​​{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/