2016-02-15 52 views
0

只返回匹配數組我有一個集合中的下列文件:MongoDB的 - 從Object

{ 
    "_id" : 101, 
    "students" : [ 
     { 
      "name" : "john",    
      "age" : 10, 
      "city":'CA' 
     }, 
     { 
      "name" : "danial",    
      "age" : 15, 
      "city":'KA' 
     } 
    ] 
} 

{ 
    "_id" : 102, 
    "students" : [ 
     { 
      "name" : "adam",    
      "age" : 20, 
      "city":'NY' 
     }, 
     { 
      "name" : "johnson",    
      "age" : 12, 
      "city":'CA' 
     } 
    ] 
} 

而且我火了以下查詢:

db.data.find({'students.city':'CA'}) 

這將返回來自我的「學生」對象這兩份文件的一個實例與過濾器(「城市」;「CA」)匹配。

但是,我希望只在結果中獲得匹配數組。就是我想要的結果如下:

{ 
    "_id" : 101, 
    "students" : [ 
     { 
      "name" : "john",    
      "age" : 10, 
      "city":'CA' 
     } 
    ] 
} 

{ 
    "_id" : 102, 
    "students" : [   
     { 
      "name" : "johnson",    
      "age" : 12, 
      "city":'CA' 
     } 
    ] 
} 

請幫助。

回答

3

您需要在您的投影使用$elemMatch

> db.data.find({'students.city':'CA'},{ students:{ $elemMatch:{'city':'CA'} }}) 
{ "_id" : 101, "students" : [ { "name" : "john", "age" : 10, "city" : "CA" } ] } 
{ "_id" : 102, "students" : [ { "name" : "johnson", "age" : 12, "city" : "CA" } ] } 

順便說一句:我會強烈建議閱讀Open letter to students with homework problems

-1

我認爲你應該使用聚合操作。

在這裏,你有文件: https://docs.mongodb.org/manual/aggregation/

而且類似的問題: Retrieve only the queried element in an object array in MongoDB collection

+0

不,這是明顯錯誤的。請參閱[我的答案](http://stackoverflow.com/a/35408883/1296707)。 –

+0

是的。你是對的。再次確認後。這是更好的方式。 糾正我,如果我錯了: 我說要使用聚合,因爲我認爲你不能使用find()操作返回匹配您的條件的數組的多個元素。但是因爲它是不同的文檔,每個文檔只有一個匹配的元素。你的方式是正確的。 –

+0

我沒有檢查過,但我認爲可以在投影中使用「$或」... –

相關問題