gpt4 book ai didi

javascript - Mongoose/Mongodb findOneAndUpdate 同时保留已有的内容

转载 作者:行者123 更新时间:2023-12-04 08:20:43 25 4
gpt4 key购买 nike

我正在通过 mongoose 在我的数据库中为每个用户保存许多项目,项目结束于 User 中的项目(数组)内架构。
我如何告诉 mongodb 到 findOneAndUpdate 同时保留已经存在的项目 ?因为现在更新基本上覆盖了该用户的数据库中的整个项目数组。
我所拥有的是:

            var filter = { 'id': thisId };
let update = {
'item': itemsArray,
'updatedAt': Date.now()
};

User.findOneAndUpdate(filter, update, {upsert: true, new: true}, function(err, doc) {
if (err) return res.send(500, {error: err});
return;
});
我读过 $addToSet在 mongodb 文档中,但这是我在这里需要的吗?如何将其应用于我的查询?
更新 : $set如下建议不起作用。
我的例子:我在“item”字段中获取 400 个项目,然后根据上次更新日期的条件,我第二次获取 50 个项目,现在假设在这 50 个项目中,有一个项目在之前的 400 个项目中尚不存在添加,我希望它将项目添加到 400 成为 401。
相反,我现在在“项目”字段中找到了总共 50 个项目
我找到的解决方案 :
User.findOneAndUpdate(filter, { $set : {'updatedAt': Date.now()}, $addToSet : {'item': itemsArray} }, {upsert: true}, function(err, doc) {
if (err) return res.send(500, {error: err});
return;
});

最佳答案

你应该使用 $push :

var filter = { 'id': thisId };

User.findOneAndUpdate(filter, {
$set : { 'updatedAt': Date.now() },
$push : { 'item': itemsArray }
}, {upsert: true, new: true}, function(err, doc) {
if (err) return res.send(500, {error: err});
return;
});

关于javascript - Mongoose/Mongodb findOneAndUpdate 同时保留已有的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65511004/

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