javascript - 如何从 MongoDB 中清除重复的对象

标签 javascript arrays node.js mongodb mongoose

我的数据库中的一个对象中有一个数组,随着时间的推移,该数组会累积重复的对象(使用不可靠的 Instagram API 的一个缺点)。我正在尝试定期清除这个重复项数组,并将其替换为清理后的数组。我很难理解为什么下面的代码在我的 Node 服务器上运行不起作用。 trimArray 函数工作完美,但我的 MongoDB 对象中的“photos”数组从未更新。

// Takes in an array and outputs an array with only unique objects  
function trimArray(bloatedArray) {
    var seen = {};
    var trimmedArray = [];
    var len = bloatedArray.length;

    var j = 0;
    for(var i = 0; i < len; i++) {
        var imageLink = bloatedArray[i].link;
        var image = bloatedArray[i];
        if(seen[imageLink] !== 1) {
            seen[imageLink] = 1;
            trimmedArray[j++] = image;
        }
    }

    return trimmedArray;
}

Event.find( { $and: [{latitude: latitude}, {radius: distance}] },
    function(err,event){
        if (err) {

        } else {
            var array = event[0].photos;

            Event.update( { $and: [{latitude: latitude}, {radius: distance}] },
            { 'photos': trimArray(array) }
            );
        }
    }
);

最佳答案

我认为更新只会更新现有记录,而不是删除它们。它在返回的数组中查找项目并相应地更新它们。如果你想使用你的trimArray,你必须清空集合,然后重新插入trimArray结果(糟糕的想法)。

相反,您应该正确设置您的集合,以便首先不存储重复项。您需要设置一个唯一索引,然后就永远不需要清除。

See the docs for details .

db.things.ensureIndex({'photos.make_some_key' : 1}, {unique : true, dropDups : true})

关于javascript - 如何从 MongoDB 中清除重复的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651281/

相关文章:

javascript - 绝对位置,可滚动元素,在内容下方,干扰主要内容的滚动

javascript - 使用 jquery 确认电子邮件和密码?

javascript - 从 JS 发布表单值数组

javascript - 为什么我的 jest.mock 中的 Promise reject() 会转到 then() 而不是 catch()?

javascript - Firebase Web 代码实验室 : missing app configuration value "appId"

javascript - 添加带有渐变图像的渐变文本 => JQuery

c++ - C++ 中的关系容器和多态性问题

arrays - 根据 bool 值快速排序对象数组

node.js - 关于在 Meteor 包中使用 npm 模块

node.js - 从中间件访问环回配置数据