如何在对象数组中搜索,并在MongoDB中从数组中只得到匹配的对象



假设我有以下数据:

[
{
"_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游乐场示例

最新更新