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中使用$或返回多个元素,但不起作用。