Javascript 用mongoose更新数组
我努力想解决这个问题——我尝试了各种方法,但忍不住觉得我把事情复杂化了 我有一组值作为数组存储在MongoDB数据库中,例如: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'] 我要做的是更新阵列,以便: 将删除数据库中当
{
_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,以至于很容易忽略简单的东西。无论如何,非常感谢!很高兴帮助,很高兴编码!