2015-09-23 107 views
1

是否有可能使用find()獲取嵌套數組中保存的每個元素。我需要獲取保存在文檔的cat-field中的所有元素的列表。MongoDB:獲取嵌套數組的所有元素

{ 
    "_id" : "1", 
    "title" : "title 1", 
    "cat" : [ 
     { 
      "element" : "element 1" 
     }, 
     { 
      "element" : "element 2" 
     } 
    ] 
}, 
{ 
    "_id" : "2", 
    "title" : "title 2", 
    "cat" : [ 
     { 
      "element" : "element 3" 
     }, 
     { 
      "element" : "element 4" 
     } 
    ] 
} 

結果這個例子應該是 - 因爲我還需要文件的ID:

1, element 1 
1, element 2 
2, element 3 
2, element 4 
+0

的可能重複[重複的優雅列表子itens]( http://stackoverflow.com/questions/32733388/elegant-list-of-repeated-sub-itens) – Yogesh

回答

0

您也可以嘗試用distinct以下查詢:

db.collection.distinct("cat.element") 

編輯:

然後你可以試試$map標示重複問題,如:

你可以簡單地使用它像:

db.collection.aggregate({ 
    "$project": { 
    "cat": { 
     "$map": { 
      "input": "$cat", 
      "as": "el", 
      "in": "$$el.element" 
     } 
    }, 
    "title": 1 
    } 
}) 

OR

db.collection.aggregate({ 
    "$project": { 
    "cat": { 
     "$map": { 
      "input": "$cat", 
      "as": "el", 
      "in": "$$el.element" 
     } 
    }, 
    "title": 1 
    } 
}, { 
    $group: { 
    _id: "$_id", 
    "title": { 
     $first: "$title" 
    }, 
    "cat": { 
     "$first": "$cat" 
    } 
    } 
}) 
+0

謝謝。但是,我會放棄文件信息。我需要這些元素和文檔的ID。 – user3848987

+0

@ user3848987請檢查編輯答案 – Vishwas