Javascript 用mongoose更新数组

Javascript 用mongoose更新数组,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我努力想解决这个问题——我尝试了各种方法,但忍不住觉得我把事情复杂化了 我有一组值作为数组存储在MongoDB数据库中,例如: { _id: 1234, users: ['Bob', 'James', 'Catherine', 'Emma'] } 然后从我的应用程序向服务器发送一个新阵列,例如 var newArray = ['Edward', 'Bob', 'David', 'James', 'Ellie', 'Monica'] 我要做的是更新阵列,以便: 将删除数据库中当

我努力想解决这个问题——我尝试了各种方法,但忍不住觉得我把事情复杂化了

我有一组值作为数组存储在MongoDB数据库中,例如:

{
    _id: 1234,
    users: ['Bob', 'James', 'Catherine', 'Emma']
}
然后从我的应用程序向服务器发送一个新阵列,例如

var newArray = ['Edward', 'Bob', 'David', 'James', 'Ellie', 'Monica']
我要做的是更新阵列,以便:

  • 将删除数据库中当前但不在新数组中的所有元素
  • 两个数组中的任何元素都将保留
  • 将添加新数组中但不在原始数组中的任何元素
  • 因此,保存到数据库的最终结果应为:

    ['Bob', 'James', 'Edward', 'David', 'Ellie', 'Monica']
    
    我试过简单地跑步

    documents.findOneAndUpdate({ id: 1234 }, {
        $set: {  users: newArray  }
    })
    
    但它所做的只是将新数组添加到现有数组中,因此我最终得到了重复的数组,并且它不会删除不需要的值-结果如下:

    {
        _id: 1234,
        users: ['Bob', 'Bob', 'James', 'James', 'Catherine', 'Emma', 'David', 'Edward', 'Ellie', 'Monica']
    }
    
    我也试过:

    newArray.forEach(function(user){
        documents.findOneAndUpdate({ id: 1234 }, {
            $addToSet: { users: user }
        })
    })
    
    它在不复制现有值的情况下添加新值,但不删除不在新提交数组中的值,即:

    {
        _id: 1234,
        users: ['Bob', 'James', 'Catherine', 'Emma', 'Edward', 'David', 'Ellie', 'Monica']
    }
    
    有没有一种简单的方法可以做到这一点,而不需要一系列复杂的嵌套循环和对数据库的多次调用(这就是我目前要做的)

    注意:为了简洁起见,我没有在上面的代码中包含回调或
    .exec
    函数-我知道这些函数是执行所必需的,但我认为如果包含它们,会有点复杂

    编辑:我还应该补充一点,这是我实际工作的一个简化版本,但应该展示我试图实现的目标

    谢谢

    您是否尝试过这样做:

    documents.findOne({ id: 1234 },function(doc) {
        doc.users = newArray
        doc.save()
    })
    
    我以前是这样做的,但从未尝试过findOneAndUpdate。

    您是这样尝试的:

    documents.findOne({ id: 1234 },function(doc) {
        doc.users = newArray
        doc.save()
    })
    

    我以前是这样做的,但从未尝试过FindOn和DupDate。

    我的建议是使用它,我的建议是使用它来实现完美!我知道我把事情弄得太复杂了!有时候似乎有太多不同的方法来处理mongoDB/mongoose,以至于很容易忽略简单的东西。无论如何,非常感谢!很高兴帮助,很高兴编码!完美的我知道我把事情弄得太复杂了!有时候似乎有太多不同的方法来处理mongoDB/mongoose,以至于很容易忽略简单的东西。无论如何,非常感谢!很高兴帮助,很高兴编码!