如何在mongodb中查询嵌套文档?
我有带嵌套文档的文档如何在mongodb中查询嵌套文档?,mongodb,Mongodb,我有带嵌套文档的文档审阅: { "_id" : ObjectId("53a5753937c2f0ef6dcd9006"), "product" : "Super Duper-o-phonic", "price" : 11000000000, "reviews" : [ { "user" : "fred",
审阅
:
{
"_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的评论
最终查询应选择产品
价格
和评论
中的两个文档,其评级
为5
我尝试的最后一个查询是:
db.testData.find({'reviews':{$elemMatch:{'rating':{$gte:5}}}}).pretty()
这很奇怪,但不起作用
如何在mongodb中执行此操作?请查看此处:
以防你想到这个:
如果您尝试使用$elemMatch
完成此操作,它将返回第一个匹配的审阅。
在这里查看:
以防你想到这个:
如果您尝试使用$elemMatch
完成此操作,它将返回第一个匹配的审阅。
如果您只需要来自审查
且其评级
为5的单个子文档,则可以使用包含与您的查询匹配的审查
的第一个元素:
db.test.find({'reviews.rating':5},{product:1,price:1,'reviews.$':1})
如果您希望所有审查元素的评分为5(而不仅仅是第一个),您可以使用聚合而不是查找:
db.test.aggregate([
//仅包括至少有一个5级评审的文档
{$match:{'reviews.rating':5},
//复制文档,每个审阅元素一个
{$unwind:'$reviews'},
//仅包括评级为5的项目
{$match:{'reviews.rating':5},
//在输出中仅包括以下字段
{$project:{产品:1,价格:1,评论:1}}}])
如果您只需要来自审查
且其评级
为5的单个子文档,则可以使用包含与您的查询匹配的审查
的第一个元素:
db.test.find({'reviews.rating':5},{product:1,price:1,'reviews.$':1})
如果您希望所有审查元素的评分为5(而不仅仅是第一个),您可以使用聚合而不是查找:
db.test.aggregate([
//仅包括至少有一个5级评审的文档
{$match:{'reviews.rating':5},
//复制文档,每个审阅元素一个
{$unwind:'$reviews'},
//仅包括评级为5的项目
{$match:{'reviews.rating':5},
//在输出中仅包括以下字段
{$project:{产品:1,价格:1,评论:1}}}])
我刚试过这个,如果我从评论中选择两个评级为5的文档,它就不起作用了。因为审核。$
确保结果中只包含第一个匹配的文档。@volodymyrlevytsky如果您想包含所有评分为5的审核,而不仅仅是第一个审核,我会使用聚合方法。我只是尝试了这个方法,如果我从评分为5的审核中选择两个文档,它就不起作用了。因为审核。$
确保结果中只包含第一个匹配的文档。@volodymyrlevytsky如果希望包含所有评分为5的审核,而不仅仅是第一个审核,我将使用聚合方法。我尝试了$elemMatch,但它不起作用。你能发布一个查询吗?我尝试了$elemMatch,但它不起作用。你能发布一个查询吗?