Mongodb 如何在Mongo中选择数组的一部分并进行筛选?

Mongodb 如何在Mongo中选择数组的一部分并进行筛选?,mongodb,mongodb-query,Mongodb,Mongodb Query,我在Mongo中有一个集合,其中包含如下所示的文档: { name: "Bob", destinations: [ { city: "Dallas", state: "Texas", isBusiness: "true", }, { city: "San Diego", state: "California",

我在Mongo中有一个集合,其中包含如下所示的文档:

{
    name: "Bob",
    destinations:
    [
        {
            city: "Dallas",
            state: "Texas",
            isBusiness: "true",
        }, {
            city: "San Diego",
            state: "California",
            isBusiness: "true",
        }   
    ]
},
{
    name: "Sue",
    destinations:
    [
        {
            city: "Las Vegas",
            state: "Nevada",
            isBusiness: "false",
        }, {
            city: "Sacramento",
            state: "California",
            isBusiness: "true",
        }   
    ]
}
我想查询此集合,以便接收每个人的
姓名
,以及加利福尼亚州内每个目的地的
城市
,但不接收应忽略的
isBusiness

查询结果应为:

[
    {
        name: "Bob",
        city: "San Diago",
    },
    {
        name: "Sue",
        city: "Sacramento"
    }
]

这个例子有点做作,但我如何做到这一点?

相当基本的聚合,不确定如何解释它:

db.collectionName.find({"destinations.state":"California"},{name:1,"destinations.city":1})
db.collection.aggregate([
    {$unwind: "$destinations"},
    {$match: {"destinations.state":"California"}},
    {$project: {_id:0, name: 1, city: "$destinations.city"}}
])
文件:


$MongoDB的elemMatch运算符用于对元素数组应用过滤器

根据上述问题中的描述,请尝试在MongoDB shell中执行以下查找操作

db.collection.find({
    destinations: {
        $elemMatch: {
            state: "California"
        }
    }
}, {
    'destinations.$': 1,
    name: 1,
    _id: 0
})

这是不对的。它确实正确地从
destinations
数组中提取
城市
,但它仍然返回所有城市,而不仅仅是加利福尼亚州的城市。是的。贴出的带有聚合的答案是您的解决方案。