2017-06-14 66 views
0

我有一个mongodb查询问题。

目前我执行

collection.find({ "history.data": { "key": "paymentStatus", "value": { 
$in: ["fail1", "fail2", "fail3", "fail4", "fail5", "fail6", "fail7", 
"blocked"] } } }) 

,但它不返回我所期望的对象,事实上它返回一个空数组。

对象的结构如下:

{history: {time: ... , data: [ {key: "paymentStatus", value: "fail1"}, ... ] }} 

这是正确的语法进行嵌套的MongoDB找到查询?

+0

您可以使用'elemMatch'来比较多个查询条件中的数组字段。类似于'collection.find({“history.data”:{$ elemMatch:{“key”:“paymentStatus”,“value”:{$ in:[“fail1”,“fail2”,“fail3”,“fail4 “,”fail5“,”fail6“,”fail7“,”blocked“]}}}})' – Veeram

+0

谢谢很多好的先生 –

回答

1

您所查询的正确的语法如下:

collection.find({ 
    "history.data": { 
    $elemMatch: { 
     "key":"paymentStatus", 
     "value": { $in: ["fail1","fail2","fail3","fail4","fail5","fail6","fail7", "blocked"]} 
    } 
    } 
}) 

如果你只有两个一个查询条件,而不是,你可以写:

collection.find({ "history.data.key":"paymentStatus"}) 

但在你的情况你有两个查询条件,所以你需要使用$ elemMatch。