【发布时间】:2020-06-12 11:49:11
【问题描述】:
我将使用here中的示例
{
_id: 1,
zipcode: 63109,
students: [
{ name: "john", school: 102, age: 10 },
{ name: "jess", school: 102, age: 11 },
{ name: "jeff", school: 108, age: 15 }
]
}
{
_id: 2,
zipcode: 63110,
students: [
{ name: "ajax", school: 100, age: 7 },
{ name: "achilles", school: 100, age: 8 },
]
}
{
_id: 3,
zipcode: 63109,
students: [
{ name: "ajax", school: 100, age: 7 },
{ name: "achilles", school: 100, age: 8 },
]
}
{
_id: 4,
zipcode: 63109,
students: [
{ name: "barney", school: 102, age: 7 },
]
}
如果我跑了
db.schools.find( { zipcode: 63109 },
{ students: { $elemMatch: { school: 102 } } } )
它将给出每个数组的first结果。命名:
{ "_id" : 1, "students" : [ { "name" : "john", "school" : 102, "age" : 10 } ] }
{ "_id" : 3 }
{ "_id" : 4, "students" : [ { "name" : "barney", "school" : 102, "age" : 7 } ] }
如何让它返回符合条件的数组的所有对象(而不仅仅是第一个对象)?意思是:
{
_id: 1,
students: [
{ name: "john", school: 102, age: 10 },
{ name: "jess", school: 102, age: 11 }
]
}
{ _id: 3 }
{_id: 4, students: [ { name: "barney", school: 102, age: 7 }]}
【问题讨论】:
-
看起来文档说它的 $elemMatch 只返回第一个数组元素,所以我想你必须在 python 中做,或者用学生列表 + 邮政编码创建新表,如
{ "name" : "john", "school" : 102, "age" : 10, zipcode: 63109 }跨度>