Mongodb 使用$in,但在特定字段上匹配
我正在尝试使用$in查询mongoDB集合。我遇到的问题是数组是JSON对象的数组,而不仅仅是单个字段的数组。因此,完整对象如下所示:Mongodb 使用$in,但在特定字段上匹配,mongodb,Mongodb,我正在尝试使用$in查询mongoDB集合。我遇到的问题是数组是JSON对象的数组,而不仅仅是单个字段的数组。因此,完整对象如下所示: { items: [ { name: "Jacket", other_field: "1234" } ] } [{name:"Jacket", other_field:"3456"}] 因此,如果我有一个如下所示的数组: { items: [
{
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会自动“向下”进入数组并选择匹配的数组
弗里克