我正在尝试使用$ in来查询mongoDB集合。我遇到的问题是数组是JSON对象的数组,而不仅仅是单个字段的数组。所以完整的对象看起来像这样:
{
items: [
{
name: "Jacket",
other_field: "1234"
}
]
}
所以如果我有一个看起来像这样的数组:
[{name:"Jacket", other_field:"3456"}]
我想查询包含在其items数组中的任何具有匹配名称字段的对象的文档,忽略所有其他字段。这可能吗?
答案 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