MongoDB-如何查找数组中的所有对象?
我正在尝试查找名为MongoDB-如何查找数组中的所有对象?,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试查找名为program的数组中的所有元素。运行db.base.find({“Program.title”:“News”},{“Program.$.title”:“News”}).pretty()的结果是: { "_id" : ObjectId("55a48dd3e72db9d63e53478b"), "programme" : [ { "attributes" : { "start" : "20150713010000 -0400",
program
的数组中的所有元素。运行db.base.find({“Program.title”:“News”},{“Program.$.title”:“News”}).pretty()
的结果是:
{
"_id" : ObjectId("55a48dd3e72db9d63e53478b"),
"programme" : [
{
"attributes" : {
"start" : "20150713010000 -0400",
"stop" : "20150713013000 -0400",
"channel" : "I47176.labs.zap2it.com"
},
"title" : "News",
"category" : "News",
"episode-num" : "SH01831861.0000",
"new" : true
}
]
}
但是有更多的条目被称为“新闻”,而不仅仅是一条,如上所示
我还尝试了db.base.find({“program.title”:“News”}).pretty()
,但这只会导致列出一堆随机条目,不管它们的标题是否为“News”
非常感谢您的帮助,并且必须“为noob问题道歉”。在MongoDB
中投影到匹配项。find()
查询只能返回与您的条件匹配的“第一个”元素
因此,要获得“多个”匹配,最好的方法是使用和,首先使用以下各项筛选文档:
db.base.aggregate([
{“$match”:{“programme.title”:“News”},
{“$redact”:{
“$cond”:{
“if”:{“$eq”:[{“$ifNull”:[“$title”,“News”]},“News”}],
“然后”:“$$down”,
“else”:“$$PRUNE”
}}
}}
])
这将从数组中“删除”(“修订”)与您提供的“标题”不匹配的任何条目
这是一种很好的方法,因为您不会在管道中使用创建更多文档,这是处理数组的另一种方法
问题是,文档中不能有另一个属性名为“title”的元素,因为
$$decent
会进入结构并比较每一级别的字段名。可以借助聚合实现以下目的:
db.base.aggregate([
{$unwind : "$programme"},
{$match : { "programme.title" : "News" } },
{$group : { "_id" : "$_id" , "programme" : { $push: "$programme" } } }
]);
一些打字错误
IfNull
应该是另一个手指在这里举起的“else”:“$$KEEP”
应该是“else”:“$$PRUNE”