2016-02-26 74 views
1

我無法成功提取所有主記錄並最終獲得陣列。我只提取與「屬性」主要記錄的字段計數> 0帶或不帶子陣列記錄的聚合記錄

數據樣本是:

docs = [ 
    { docId : "1", fieldDoc1: "value", fieldDoc2: "value", attributes: [ { attrId: "1.1", fieldAttr1: "value" }, { attrId: "1.2", fieldAttr1: "value" }] }, 
    { docId : "2", fieldDoc1: "value", fieldDoc2: "value", attributes: [ { attrId: "2.1", fieldAttr1: "value" }] }, 
    { docId : "3", fieldDoc1: "value", fieldDoc2: "value", attributes: [ ] } 
    ]; 

db.table.aggregate ( 
    { $match: { criterias on main part fields }, 
    { $unwind: "attributes" }, 
    { $match: { criteria on attributes fields }, 
    { $group : { 
      _id : "$docId", 
      "docs": { 
       "$push": { 
        "_id": "$docId", 
        "fieldDoc1": "$fieldDoc1", 
        "fieldDoc2": "$fieldDoc2", 
        "attributes": "$attributes"} 
       } 
     } }); 

對於爲例,用於提取所有的記錄,我嘗試:

db.table.aggregate ( 
     { $unwind: "attributes" }, 
     { $group : { 
       _id : "$docId", 
       "docs": { 
        "$push": { 
         "_id": "$docId", 
         "fieldDoc1": "$fieldDoc1", 
         "fieldDoc2": "$fieldDoc2", 
         "attributes": "$attributes"} 
        } 
      } }); 

只有我獲取docId:「1」和docId:「2」及其屬性。 docId:不返回沒有屬性的「3」。

1)那麼如何獲得所有相應的記錄,有或沒有屬性;

2)如何獲得主要部分的各個領域,沒有列舉這些literaly(fieldDoc1: 「$ fieldDoc1」,fieldDoc2 「:」 $ fieldDoc2" ,等等

問候

回答

0

其中字段存在,即使是空或空$exists: true將匹配這些文件

db.table.aggregate (
    { $match: { attributes : { $exists: true }} }, 
    { $unwind: "attributes" }, 
    { $group : { 
      _id : "$docId", 
      "docs": { 
       "$push": { 
        "_id": "$docId", 
        "fieldDoc1": "$fieldDoc1", 
        "fieldDoc2": "$fieldDoc2", 
        "attributes": "$attributes"} 
       } 
     } }); 
+0

恩,這不適合我。我認爲這個解決方案是由mongodb 3.2提供的,並帶有以下選項:$ unwind:{path:,preserveNullAndEmptyArrays:true}。但我無法更新我的框架。 – maiagarbot

0

最好的答案,我發現是更新蒙戈釋放3.2,然後使用$放鬆:{路徑:,preserveNullAndEmptyArrays:真正}這完美地起作用