2013-12-17 40 views
0

的陣列滿足兩個條件我有一個包含有內對象數組對象的集合:MongoDB的對象中的對象

{ 
    _id: 12345, 
    data: [ 
     { 
      state: 1, 
      type: 3, 
      info: "abc" 
     },{ 
      state: 2, 
      type: 3, 
      info: "cde" 
     },{ 
      state: 2, 
      type: 3, 
      info: "efg" 
     } 
    ] 
} 

我需要從集合中選擇對象{data.state:2,數據。輸入:3},但在運行此查詢的情況下,我會得到含有與狀態對象的對象:2類型:3,但不是含有狀態的對象:2類型: 3

如何在對象數組中的一個對象內匹配兩個條件?如何選擇僅包含狀態的對象:2類型:3

P.S.我知道$ elemMatch,但是從上面的示例對象只返回{state:2,type:3,info:「cde」},而我需要所有數據

P.P.S.下面是一些示例的結果:被檢查

對象:

data: [ 
    { 
     state: 1, 
     type: 3 
    },{ 
     state: 2, 
     type: 3 
    },{ 
     state: 2, 
     type: 3 
    } 
] 

是輸出:是(有含有兩種狀態2和類型3 2個對象)

data: [ 
    { 
     state: 1, 
     type: 3 
    },{ 
     state: 2, 
     type: 4 
    },{ 
     state: 2, 
     type: 0 
    } 
] 

是輸出:無(沒有包含狀態2 AND類型3的單個對象)

data: [ 
    { 
     state: 5, 
     type: 3 
    },{ 
     state: 1, 
     type: 3 
    },{ 
     state: 1, 
     type: 4 
    },{ 
     state: 2, 
     type: 3 
    } 
] 

是輸出:是(有一個obj ect包含狀態2 AND類型3)

+0

你可以給一個查詢應該返回的例子嗎? – benjaminjosephw

+0

@benjaminjosephw我已經更新了這個問題。你可以看到Mongo在看什麼對象,什麼時候它應該被包含在結果中。 – Xeos

回答

0

$ elemMatch返回數組中的第一個匹配元素。你可以使用Aggregation Framework來獲得你想要的。

db.collection.aggregate(
    {$unwind : "$data"}, 
    {$match : {"data.state" : 2, "data.type" : 3}} 
)