在mongo查询中,在数组上使用两次相同的字段

时间:2017-03-14 00:34:35

标签: mongodb mongodb-query

有没有办法过滤数组中的同一个字段?例如,我想寻找主色为黑色但不是紫色的汽车。 (即我想根据下面的例子返回car1)

我尝试过使用下面这些表达式,但是他们要么不返回任何内容。我尝试过使用$,但它似乎并不是正确的工具。

  
    

" info.colors" :{" $ elemMatch" :{" main" :{" $ in" :[" black"]}}," $ elemMatch" :{" main" :{" $ nin" :[" purple"]}}}

  

  
    

" info.colors" :{" $ elemMatch" :{" main" :{" $ in" :[" black"]," $ nin":[" purple"]}}}

  
[{
"car": "car1",
"info": {
    "colors": [{
        "main": "green",
        "secondary": "blue"
    }, {
        "main": "black",
        "secondary": "red"
    }, {
        "main": "yellow",
        "secondary": "yellow"
    }],
    "price": "123"
},
"owner": "tom"
},
{
"car": "car2",
"info": {
    "colors": [{
        "main": "white",
        "secondary": "red"
    }, {
        "main": "black",
        "secondary": "red"
    }, {
        "main": "purple",
        "secondary": "grey"
    }],
    "price": "123"
},
"owner": "dick"
}]    

1 个答案:

答案 0 :(得分:0)

单个条件不需要$elemMatch$eq后跟$ne将为您效劳。

您可以使用带有隐式和。

的点表示法来访问嵌入式数组
db.collection.find({"info.colors.main" : {$eq:"black", $ne: "purple"}})

隐含在同一领域。

https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and

有关查询嵌入式文档的详细信息。

https://docs.mongodb.com/manual/tutorial/query-array-of-documents/