2017-07-25 166 views
0

我在MongoDB中有點新,我很難完成某個任務。我會盡力解釋它。有沒有辦法在MongoDB中將兩個數組合併成一個數組?

下面是我收集:

'workers': [ 
    { 
     _id: ObjectId(...), 
     name: 'John', 
     skills: [ 
      { id: ObjectId('111'), value: 2 }, 
      { id: ObjectId('222'), value: 3 }, 
      { id: ObjectId('333'), value: 4 }, 
     ] 
    }, 
    { 
     _id: ObjectId(...), 
     name: 'Mary', 
     skills: [ 
      { id: ObjectId('222'), value: 5 }, 
      { id: ObjectId('333'), value: 2 }, 
      { id: ObjectId('444'), value: 3 }, 
     ] 
    }, 
    ... 
] 

我試圖做到的,是這樣的:

result: [ 
    allSkills: [ 
     { id: ObjectId('111'), value: 2 }, 
     { id: ObjectId('222'), value: 5 }, 
     { id: ObjectId('333'), value: 4 }, 
     { id: ObjectId('444'), value: 3 } 
    ] 
] 

我的結果應該是一個單一的陣列與workers集合中的所有技能(最終我會過濾它們)。

在這個例子中,我告訴我的最終結果,只有獨特的價值觀和每個技能的更大value,但我想在這裏實現只是合併所有skills陣列整合到一個單一的allSkills陣列。現在,我得到的是一個文檔列表,每個文檔都有其skills數組。

在此先感謝。

回答

3

像這樣的事情?:

db.collection.distinct('skills'); 

distinct api docs here!

另外,如果你想獲得只是技巧對象的道具,例如像「價值」,你可以這樣做:

db.collection.distinct('skills.value'); 

希望它有幫助。

+1

是的,它幫助:) 我想開發這個答案來實現我的最終結果,但絕對有幫助。 – Kleber

1

我接受了SebastiánEspinosa的回答,因爲它回答了我的問題。但只是爲了記錄在案,我結束了使用另一種解決辦法,我把這裏將來參考:

db.workers.aggregate([ 
    { $unwind: "$skills" }, 
    { 
     $group: { 
      _id: '$skills.id', 
      value: { $max: '$skills.value' } 
     } 
    } 
]) 

其中產生的結果:

result: [ 
    { id: ObjectId('111'), value: 2 }, 
    { id: ObjectId('222'), value: 5 }, 
    { id: ObjectId('333'), value: 4 }, 
    { id: ObjectId('444'), value: 3 } 
] 

的寶藏,這裏存在的$unwind運營商,這有助於實際合併skills陣列。

我之所以沒有使用明顯的答案是因爲我無法將其發展到我所期待的最終結果,但正如我所說,它完全回答了我原來的問題。

相關問題