Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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 - Fatal编程技术网

MongoDB-仅从对象返回匹配数组

MongoDB-仅从对象返回匹配数组,mongodb,Mongodb,我收集了以下文件: { "_id" : 101, "students" : [ { "name" : "john", "age" : 10, "city":'CA' }, { "name" : "danial", "age" : 15, "c

我收集了以下文件:

{
    "_id" : 101,
    "students" : [ 
        {
            "name" : "john",            
            "age" : 10,
            "city":'CA'
        },
        {
            "name" : "danial",            
            "age" : 15,
            "city":'KA'
        }
    ]
}

{
    "_id" : 102,
    "students" : [ 
        {
            "name" : "adam",            
            "age" : 20,
            "city":'NY'
        },
        {
            "name" : "johnson",            
            "age" : 12,
            "city":'CA'
        }
    ]
}
我提出以下问题:

db.data.find({'students.city':'CA'})
这将返回两个文档中的“students”对象,因为其中一个实例与两个文档中的过滤器(“city”;“CA”)匹配

但是,我只希望在结果中获得匹配的数组。也就是说,我希望得到以下结果:

{
    "_id" : 101,
    "students" : [ 
        {
            "name" : "john",            
            "age" : 10,
            "city":'CA'
        }
    ]
}

{
    "_id" : 102,
    "students" : [        
        {
            "name" : "johnson",            
            "age" : 12,
            "city":'CA'
        }
    ]
}

请帮助。

我认为您应该使用聚合操作

这是您的文档:

还有一个类似的问题:
我认为您应该使用聚合操作

这是您的文档:

还有一个类似的问题:

您需要在投影中使用

> db.data.find({'students.city':'CA'},{ students:{ $elemMatch:{'city':'CA'} }})
{ "_id" : 101, "students" : [ { "name" : "john", "age" : 10, "city" : "CA" } ] }
{ "_id" : 102, "students" : [ { "name" : "johnson", "age" : 12, "city" : "CA" } ] }
顺便说一句:我强烈建议你读这本书

您需要在投影中使用

> db.data.find({'students.city':'CA'},{ students:{ $elemMatch:{'city':'CA'} }})
{ "_id" : 101, "students" : [ { "name" : "john", "age" : 10, "city" : "CA" } ] }
{ "_id" : 102, "students" : [ { "name" : "johnson", "age" : 12, "city" : "CA" } ] }

顺便说一句:我强烈建议你读这本书

不,那显然是错的。看,是的。你是对的。再次确认后。你的方式更好。如果我错了,请纠正我:我说使用聚合是因为我认为不能使用find()操作返回与条件匹配的数组的多个元素。但是因为它是不同的文档,每个文档只有一个匹配的元素。你的方式是正确的。我没有检查,但我认为可以在投影中使用“$或”…@MarkusWMahlberg我试图在$elemMatch中使用$或返回多个元素,但它不起作用。不,这显然是错误的。看,是的。你是对的。再次确认后。你的方式更好。如果我错了,请纠正我:我说使用聚合是因为我认为不能使用find()操作返回与条件匹配的数组的多个元素。但是因为它是不同的文档,每个文档只有一个匹配元素。您的方式是正确的。我没有检查,但我认为可以在投影中使用“$或…”@MarkusWMahlberg我尝试在$elemMatch中使用$或返回多个元素,但不起作用。