簡體   English   中英

獲取mongodb文檔的多個數組並將其合並為唯一值

[英]Get multiple arrays of mongodb documents and merge them for unique values

我需要獲取所有標簽,這些標簽存儲在多個文檔的數組中。 我可以通過以下方式選擇所有需要的文件:

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;

也許可以優化...

為了解決您的問題,mongoDB已經向我們提供了一個distinct命令。 如下使用它:

Collection.distinct('metadata.tags')

上面的命令將為您提供與數組不同的值。 不會有任何重復的元素。 因此,您的第二個問題也將得到解決

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM