gpt4 book ai didi

javascript - 获取多个 mongodb 文档数组并将它们合并以获得唯一值

转载 作者:行者123 更新时间:2023-11-28 18:53:02 25 4
gpt4 key购买 nike

我需要获取所有标签,这些标签存储在多个文档的数组中。我可以通过以下方式选择所有需要的文档:

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')

上面的命令将为您提供与数组不同的值。不会有任何重复的元素。这样你的第二个问题也就解决了

关于javascript - 获取多个 mongodb 文档数组并将它们合并以获得唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com