使用$ in但匹配特定字段

时间:2014-12-12 03:38:51

标签: mongodb

我正在尝试使用$ in来查询mongoDB集合。我遇到的问题是数组是JSON对象的数组,而不仅仅是单个字段的数组。所以完整的对象看起来像这样:

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

所以如果我有一个看起来像这样的数组:

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

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

3 个答案:

答案 0 :(得分:0)

您可以使用$elemMatch

示例 -

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

如需更多理解,请参阅 - $elemMatch

答案 1 :(得分:0)

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

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

在这种情况下,您使用以下查询

db.collectionName.find({"items.name":"Jacket"},{"items":1})

因此上面的查询将仅返回匹配的items.name匹配条件。 如果您的文档结构看起来像嵌套在下面

,还有另外一种可能性
    {
    items: [
    {
        name: "Jacket",
        other_field: "1234"
    },
    {
        name: "Jacket",
        other_field: "12345"
    },
    {
        name: "Jacket2",
        other_field: "1234e"
    }
    ]
}

在这种情况下,应使用aggregate功能,如下所示

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

答案 2 :(得分:0)

如果我正确理解了您的要求,那么就可以问

db.collectionName.find({'items.name': 'Jacket'})

MongoDB自动执行"降序"进入数组并选择匹配的数组。

FRICKE