Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-如何查找数组中的所有对象?_Mongodb_Mongodb Query - Fatal编程技术网

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”