2013-04-02 31 views
5

我發現mongodb聚合框架是非常強大的 - 它似乎是一個很好的選擇,以展平一個對象。我的模式在一個名爲materials的數組中使用了一個子對象數組。材料的數量是可變的,但是特定的字段(類別)在數組中的對象間是唯一的。我想使用聚合框架來扁平化結構並根據類別字段的值動態重命名字段。我無法找到一個簡單的方法來完成這個使用$項目以及$ cond。有沒有辦法?MongoDB聚合框架 - 動態字段重命名

的原因材料的對象的陣列,以允許簡單的搜索:

例如{'materials.name':'XYZ'}將找到XYZ的任何文檔都拉回來。

E.g.之前和文件

{ 
"_id" : ObjectId("123456"), 
"materials" : [ 
    { 
     "name" : "XYZ", 
     "type" : "Red", 
     ... 
     "category" : "A" 
    }, 
    { 
     "name" : "ZYX", 
     "type" : "Blue", 
     ... 
     "category" : "B" 
    }] 
} 

{ 
"material_A_name" : "XYZ", 
"material_A_type" : "Red", 
... 
"material_B_name" : "ZYX", 
"material_B_type" : "Blue", 
... 
} 
+0

您的'after'文檔無效JSON – JohnnyHK

+0

謝謝,更新 - 這是從我的編輯器中創建模型的錯誤 – user2234151

+0

好吧,我明白你現在想要做什麼。在agg框架中對動態生成的鍵沒有太多的支持,所以我沒有看到你怎麼做到這一點。您可能只需在代碼中處理結果即可完成此操作。 – JohnnyHK

回答

5

有在JIRA https://jira.mongodb.org/browse/SERVER-5947這樣的一個請求 - 投上一票,如果你想擁有這個功能。

同時,如果您知道密鑰的可能值是什麼(即所有「類別」的唯一值),並且我在其上有一些示例代碼on my blog,則可以採用解決方法。

+0

請注意,自從MongoDB 3.4.4版本以來,可以將鍵轉換爲值,反之亦然。 –