Mongodb 使用$in,但在特定字段上匹配

Mongodb 使用$in,但在特定字段上匹配,mongodb,Mongodb,我正在尝试使用$in查询mongoDB集合。我遇到的问题是数组是JSON对象的数组,而不仅仅是单个字段的数组。因此,完整对象如下所示: { items: [ { name: "Jacket", other_field: "1234" } ] } [{name:"Jacket", other_field:"3456"}] 因此,如果我有一个如下所示的数组: { items: [

我正在尝试使用$in查询mongoDB集合。我遇到的问题是数组是JSON对象的数组,而不仅仅是单个字段的数组。因此,完整对象如下所示:

{
    items: [
        {
            name: "Jacket",
            other_field: "1234"
        }
    ]
}
[{name:"Jacket", other_field:"3456"}]
因此,如果我有一个如下所示的数组:

{
    items: [
        {
            name: "Jacket",
            other_field: "1234"
        }
    ]
}
[{name:"Jacket", other_field:"3456"}]

我想查询在其items数组中包含任何具有匹配名称字段的对象的文档,忽略所有其他字段。这可能吗?

您可以使用
$elemMatch
进行此操作

范例-

db.users.find({items: { $elemMatch: {name:'Jacket'} } } )

要了解更多信息,您可以根据您的问题参考-

,如果您的文档结构如下所示,则应该有两种可能性

    {
    items: [
    {
        name: "Jacket",
        other_field: "1234"
    }
    ]
 }
在本例中,使用以下查询

db.collectionName.find({"items.name":"Jacket"},{"items":1})
因此,上面的查询将只返回匹配项。名称匹配条件。 如果您的文档结构看起来像下面的嵌套结构,那么还有更多的可能性

    {
    items: [
    {
        name: "Jacket",
        other_field: "1234"
    },
    {
        name: "Jacket",
        other_field: "12345"
    },
    {
        name: "Jacket2",
        other_field: "1234e"
    }
    ]
}
在这种情况下,应使用下面的
聚合
函数

db.collectionName.aggregate({
    "$unwind": "$items"
},
{
    "$match": {
    "items.name": "Jacket"
    }
},
{
    "$project": {
    "_id": 0,
    "items.name": 1,
    "items.other_field": 1
    }
})

如果我正确理解你的要求,我可以问你

db.collectionName.find({'items.name': 'Jacket'})
MongoDB会自动“向下”进入数组并选择匹配的数组

弗里克