2014-09-28 18 views
1

鑑於MongoDB的以下數據:總集到超

[ 
    { id: 1, stuff: ["A", "B"] }, 
    { id: 2, stuff: ["B", "C"] }, 
    ... (lots and lots of records) 
] 

是否有可能獲得的所有「東西」集合的並集?例如["A","B","C"]

我使用$addToSet

aggregate([ 
    { $group: { 
     _id: null, 
     allStuff: { $addToSet: "$stuff" } 
    } 
    } 
]) 

嘗試,但創建一套套例如[ ["A", "B"], ["B", "C"] ]

+0

一切皆有可能。你有沒有對此有任何想法,或者你只是想讓其他人爲你工作? – 2014-09-28 02:26:51

+0

@SalvadorDali我試過使用'$ addToSet'。編輯的問題,以顯示我迄今爲止做了什麼。通過文檔查看,但無法找到任何其他參考來設置聯合。 – Constantinos 2014-09-28 07:01:25

回答

1

好,顯示你的嘗試後,這裏是你可以做什麼:

db.a.aggregate([ 
    { $unwind : "$stuff" }, 
    { $group : { 
    _id: null, 
    all : {$addToSet : "$stuff"} 
    }} 
]) 

在開始的時候unwinds一切,你有數組中的元素,然後就試圖將它們全部添加到組。

db.a.insert({ id: 1, stuff: ["A", "B"] }) 
db.a.insert({ id: 2, stuff: ["B", "C"] }) 
db.a.insert({ id: 3, stuff: ["A", "B", "C", "D"] }) 

爲您提供:{ "_id" : null, "all" : [ "D", "C", "B", "A" ] }

+0

謝謝 - $是多麼昂貴的放鬆?我希望有幾千條記錄,「stuff」數組的平均大小爲10-20。 – Constantinos 2014-09-28 07:29:35

+0

@Constantinos對不起,但我很難給出估計。我可以告訴你,幾千個數據庫是超小的。您也可以嘗試使用[foreach](http://stackoverflow.com/a/22890331/1090562)將所有元素收集到數組中,然後查找所有獨特元素。但是要進行測量以找出哪一個更好。 – 2014-09-28 07:33:08