2017-06-14 102 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。