查询嵌入式文档数组给出错误答案

时间:2017-10-23 16:42:59

标签: json mongodb

我是MongoDB的新手。这是我的JSON文档

> 
> db.test.find().pretty()
{
"_id" : ObjectId("59ee168f9da785077ed9359d"),
"recordid" : 500,
"metadata" : [
    {
        "field" : 1,
        "values" : [
            100,
            102,
            110,
            151,
            804
        ]
    },
    {
        "field" : 2,
        "values" : [
            201,
            202,
            151
        ]
    },
    {
        "field" : 3,
        "values" : [
            350,
            351
        ]
    }
]
}
> 
>

我正在尝试在查询中使用$和运算符,以便为以下查询检索0。然而它返回1。 1是正确的答案,但不是我想要的。

... 
... 
> 
> db.test.find( {
...                     $and:[  
...                             {"metadata.field": 2},
...                             {"metadata.values": { $in: [654,804]}},
...                             {recordid: 500}
...                          ]
...                   }
...                ).count()
1
> 
> 

我知道为什么它会返回1个结果。这是因为field: 1中存在804的“值”。

我想要的是查询返回0结果,因为field: 2在“值”字段中没有值654和804(它只有151,201和202)。

我做错了什么?

史蒂夫

1 个答案:

答案 0 :(得分:0)

您可以使用$elemMatch运算符:

  

$ elemMatch运算符匹配包含数组字段的文档,其中至少有一个元素符合所有指定的查询条件。

例如:

db.test.find({
    recordid: 500,
    // only match those sub documents in the metadata array which have field=2 
    // and a score of either 654 or 804
    metadata: { $elemMatch: { field: "2", score: { $in: [654, 804] } } }
})