假设我有以下数据:
[
{
"_id": 101,
"name": "ABC",
"students": [
{
"name": "john",
"age": 10,
"city": "CA"
},
{
"name": "danial",
"age": 15,
"city": "KA"
}
]
},
{
"_id": 102,
"name": "DEF",
"students": [
{
"name": "adam",
"age": 20,
"city": "NY"
},
{
"name": "johnson",
"age": 12,
"city": "CA"
}
]
}
]
现在我想取一下这个名字和城市是加州的学生
我所做的是:
db.collection.find({
"students.city": "CA"
},
{
students: {
$elemMatch: {
"city": "CA"
}
}
})
并返回:
[
{
"_id": 101,
"students": [
{
"age": 10,
"city": "CA",
"name": "john"
}
]
},
{
"_id": 102,
"students": [
{
"age": 12,
"city": "CA",
"name": "johnson"
}
]
}
]
但名称缺失,即ABC和DEF,如何包含?
现在,如果我做这样的事情:
db.collection.find({
students: {
$elemMatch: {
city: "CA"
}
}
})
然后它返回名称和学生数组,但它包括那些城市不是CA的学生。
[
{
"_id": 101,
"name": "ABC",
"students": [
{
"age": 10,
"city": "CA",
"name": "john"
},
{
"age": 15,
"city": "KA",
"name": "danial"
}
]
},
{
"_id": 102,
"name": "DEF",
"students": [
{
"age": 20,
"city": "NY",
"name": "adam"
},
{
"age": 12,
"city": "CA",
"name": "johnson"
}
]
}
]
这是通往操场的链接https://mongoplayground.net/p/NHHu3GahKoK
您需要将name: 1
添加到投影中。
db.collection.find({
"students.city": "CA"
},
{
name: 1,
students: {
$elemMatch: {
"city": "CA"
}
}
})
Mongo游乐场示例