0
我需要獲取所有標籤,這些標籤存儲在數組中用於多個文檔。我可以選擇通過所有需要的文件:獲取mongodb文檔的多個數組並將它們合併爲唯一值
Collection.find({ 'metadata.tags': { $exists: true } });
第一文檔的數據可能看起來像
"metadata" : {
"type" : "photo",
"tags" : [
"test",
"anything",
"something",
"more"
]
}
第二個:
"metadata" : {
"type" : "photo",
"tags" : [
"different",
"content",
"something",
"more"
]
}
一些陣列中的元素都是複製。我只需要唯一的值,所以在這個例子中的結果將有六個元素。
我想大概是這樣的刪除重複:
var c = a.concat(b);
var tags = c.filter(function (item, pos) { return c.indexOf(item) == pos; });
return tags;
但我的第一個問題是如何讓所有陣列的訪問,這可能是更多的則只有兩個,因爲find()
會給我多文檔。如何獲取所有文檔的數組併合並它們?
第二個問題是刪除重複項,因爲我的示例只適用於兩個數組。
更新
我會做這樣的事情:
var tags = [];
Media.find({ 'metadata.tags': { $exists: true } }).forEach(function(doc) {
tags = tags.concat(doc.metadata.tags);
});
var result = tags.filter(function (item, pos) { return tags.indexOf(item) == pos; });
return result;
也許這可以優化...
它是否也是minimongo的一部分,因爲我使用流星? – user3142695
我曾在貓鼬和mongodb本機驅動程序,都提供了不同的方法。通過谷歌搜索,我發現minimongo不支持不同的關鍵字。我也可以給你一個聚合查詢作爲解決方法,如果它確實支持聚合 –
看到這個太http://stackoverflow.com/questions/14514733/does-meteor-have-a-distinct-query-for-collections –