我是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)。
我做错了什么?
史蒂夫
答案 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] } } }
})