2016-04-29 50 views
0

我有一個文件結構的陣列內對數組的屬性值匹配如下:MongoDB的找對象

{ 
    "field1": "value", 
    "field2": "value", 
    "items": [ 
     { 
      "inField1": "value1", 
      "inField2": "value2", 
      "votes": { 
       "count": 2, 
       "people": [ 
        { 
         "username": "user1", 
         "image": "http://image/to/user1/profile.jpg" 
        }, 
        { 
         "username": "user2", 
         "image": "http://image/to/user2/profile.jpg" 
        } 
       ] 
      } 
     }, 
     { 
      "inField1": "value3", 
      "inField2": "value4", 
      "votes": { 
       "count": 1, 
       "people": [ 
        { 
         "username": "user1", 
         "image": "http://image/to/user1/profile.jpg" 
        } 
       ] 
      } 
     } 
    ] 
} 

現在我需要的所有項目(項目領域的一個Object)在任何 property votes property has a username as user1

在上面提到的例子中,它應該返回兩個項目,因爲兩者都含有USER1在username屬性,但是如果我搜索用戶2然後ONL的第一個項目應返回。

回答

0

回答這個問題是在另一SO鏈接發現: https://stackoverflow.com/a/20155210/2641194

首先,我們必須$放鬆每個陣列的數據,然後兩人是一個單獨的文件,然後我們的$匹配進來的圖片挑出只滿足查詢的人:

db.collection('topic').aggregate(
    [{ 
     "$unwind": "$items" 
    }, { 
     "$unwind": "$items.votes.people" 
    }, { 
     "$match": { 
      "items.votes.people.username": "user2" 
     } 
    }], function(err, docs) { 
     if(!err) { 
      docs.forEach(function(doc) { 
       // code 
      }); 

     } else { 
      console.log(err); 
     } 
     db.close(); 
    }); 

如果您需要進一步瞭解$放鬆,以及它是如何工作,然後請參閱本MongoDB的文檔鏈接:https://docs.mongodb.org/manual/reference/operator/aggregation/unwind/

0

使用聚合框架,首先展開物品數組並匹配它們。

試試這個:

db.getCollection('test').aggregate(
    [{ 
     "$unwind": "$items" 
    }, { 
     "$match": { 
      "items.votes.people.username": "user2" 
     } 
    }] 
) 
+0

都能跟得上!不工作...還有其他建議嗎? – HVT7