2017-09-28 89 views
2

我是mongoDB聚合管道的新手,有一個非常基本的問題,但無法在任何地方找到答案。我想簡單地轉換以下塊:將'數組對象'映射到一個簡單的鍵值數組

"exclude" : [ 
      { 
       "name" : "Accenture" 
      }, 
      { 
       "name" : "Aon Consulting" 
      } 
     ] 

到:

"exclude" : [ 
      "Accenture", 
      "Aon Consulting" 
     ] 

使用聚合管道,但我似乎無法找到如何甚至通過對文檔的https://docs.mongodb.com/manual/reference/operator/aggregation/打算以後做。謝謝你的幫助。

回答

0

您肯定在使用聚合框架來處理轉換方面是正確的。在這種情況下,將陣列中的對象鍵映射到鍵值數組的主操作符將爲$map

一起使用它$addFields管道內項目轉化領域如下:

db.collection.aggregate([ 
    { 
     "$addFields": { 
      "exclude": { 
       "$map": { 
        "input": "$exclude", 
        "as": "el", 
        "in": "$$el.name" 
       } 
      } 
     } 
    } 
]) 

在上面,在$addFields流水線階段增加了新的領域的文件,如果名稱的新字段與現有字段名稱相同(包括_id),$addFields覆蓋該字段的現有值w ith指定表達式的值。

所以基本上上述替換excludes陣列與轉換陣列使用$map$map通過對輸入數組的每個元素應用表達式來工作。該表達式使用as字段中指定的變量名稱($$el)單獨引用每個元素,並返回一個包含應用結果的數組。

+1

謝謝你的快速答覆。它像一個魅力!你的解釋也非常有見地。乾杯! –

+0

@RenyvonHaus無後顧之憂,樂於助人 – chridam

1

雖然@ chridam的回答是正確的,但沒有必要使用$map。 簡單$addFields/$project就足夠了:

db.collection.aggregate([ 
    { 
     $addFields: { 
      exclude : '$exclude.name' 
     } 
    } 
]) 
相關問題