我正在尝试使用$in查询mongoDB集合。我遇到的问题是,数组是JSON对象的数组,而不仅仅是单个字段的数组。因此,完整的对象如下所示:
{
items: [
{
name: "Jacket",
other_field: "1234"
}
]
}所以如果我有一个看起来像这样的数组:
[{name:"Jacket", other_field:"3456"}]我想查询在其项目数组中包含任何具有匹配名称字段的对象的文档,忽略所有其他字段。这有可能吗?
发布于 2014-12-12 11:51:42
您可以使用$elemMatch来实现这一点。
示例:
db.users.find({items: { $elemMatch: {name:'Jacket'} } } )要了解更多信息,可以参考- $elemMatch
发布于 2014-12-12 12:11:33
根据您的问题,如果您的文档结构如下所示,则应该有两种可能性
{
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
}
})发布于 2014-12-12 18:00:09
如果我正确理解了你的要求,那么我可以问
db.collectionName.find({'items.name': 'Jacket'})MongoDB会自动对数组执行“降序”操作,并挑选匹配的数组。
弗里克
https://stackoverflow.com/questions/27436447
复制相似问题