首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用$in,但匹配特定字段

问使用$in,但匹配特定字段
EN

Stack Overflow用户
提问于 2014-12-12 11:38:51
回答 3查看 47关注 0票数 0

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

代码语言:javascript
复制
{
    items: [
        {
            name: "Jacket",
            other_field: "1234"
        }
    ]
}

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

代码语言:javascript
复制
[{name:"Jacket", other_field:"3456"}]

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

EN

回答 3

Stack Overflow用户

发布于 2014-12-12 11:51:42

您可以使用$elemMatch来实现这一点。

示例:

代码语言:javascript
复制
db.users.find({items: { $elemMatch: {name:'Jacket'} } } )

要了解更多信息,可以参考- $elemMatch

票数 0
EN

Stack Overflow用户

发布于 2014-12-12 12:11:33

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

代码语言:javascript
复制
    {
    items: [
    {
        name: "Jacket",
        other_field: "1234"
    }
    ]
 }

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

代码语言:javascript
复制
db.collectionName.find({"items.name":"Jacket"},{"items":1})

所以上面的查询将只返回匹配的items.name匹配条件。如果您的文档结构看起来像是嵌套的,还有另一种可能性,如下所示

代码语言:javascript
复制
    {
    items: [
    {
        name: "Jacket",
        other_field: "1234"
    },
    {
        name: "Jacket",
        other_field: "12345"
    },
    {
        name: "Jacket2",
        other_field: "1234e"
    }
    ]
}

在这种情况下,应该使用aggregate函数,如下所示

代码语言:javascript
复制
db.collectionName.aggregate({
    "$unwind": "$items"
},
{
    "$match": {
    "items.name": "Jacket"
    }
},
{
    "$project": {
    "_id": 0,
    "items.name": 1,
    "items.other_field": 1
    }
})
票数 0
EN

Stack Overflow用户

发布于 2014-12-12 18:00:09

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

代码语言:javascript
复制
db.collectionName.find({'items.name': 'Jacket'})

MongoDB会自动对数组执行“降序”操作,并挑选匹配的数组。

弗里克

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27436447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档