获取基于两个不同值的mongo文档

时间:2014-08-12 21:54:45

标签: mongodb

我有以下文档结构

{
            "_id" : "aaa0001",

            "path" : "/some/path",

            "information" : {
                    "name" : "info"
            },
            "colors" : {
                    "colors" : [ 
                        {
                            "key" : "AAAA001",
                            "name" : "White"
                        }, 
                        {
                            "key" : "BBBB002",
                            "name" : "Black"
                        }
                    ]
                }

}

我的想法是我必须通过颜色键返回文档。我有两个参数" path"和#34;颜色",所以,我试图做这样的事情

db.components.find(
{$and:[
        {"path" : "/some/path"},
        {"colors":{"colors" : {$elemMatch: { "key" : "AAAA001" } } } }
      ]})

我收到以下消息"脚本已成功执行,但没有显示结果"。

有人可以给我一些指示吗?

感谢

1 个答案:

答案 0 :(得分:1)

使用以下查询:

db.components.find({
    "path": "/some/path",
    "colors.colors.key" : "AAAA001"
})

MongoDB希望查询文档包含字段值对{ <field>: <value> }。因此,在您的示例中,您要查询colors字段等于的文档:

{"colors" : {$elemMatch: { "key" : "AAAA001" } } }

对于$and$elemMatch运营商,您不需要这么简单的查询。

有关详细信息,请参阅Query Documents

更新

您还可以使用Positional Operator $仅从colors数组中选择匹配的子文档:

db.components.find({
    "path": "/some/path",
    "colors.colors.key" : "AAAA001"
}, {
  _id: 0,
  "colors.colors.$": 1
})

尽管如此,您仍然无法更改文档结构,从而获得

{ "colors" : { "colors" : [ { "key" : "AAAA001", "name" : "White" } ] } }