Mongoose findOneAndUpdate - 使用另一个字段更新一个字段[重复]

Posted

技术标签:

【中文标题】Mongoose findOneAndUpdate - 使用另一个字段更新一个字段[重复]【英文标题】:Mongoose findOneAndUpdate - update one field using another [duplicate] 【发布时间】:2018-04-19 19:41:43 【问题描述】:

考虑这个架构:

var UserSchema = new Schema(
    ...
    user_id: type:String,
    previous_selection: type:String,
    current_selection: type:String
);

我需要编写一个函数,它将previous_selection 的值更新为给定user_idcurrent_selection 值。

findOneAndUpdate 有什么办法吗?

有点像 -

MyModel.findOneAndUpdate(
         user_id: id , 
         $set: "previous_selection": current_selection ,
        , 
        callback
);

或者有没有更好的方法来实现这一点?我是否必须做一个find() 然后更新?

【问题讨论】:

你不能在单个更新中用另一个字段更新一个字段,你必须调用一个 find 方法来完成这个 【参考方案1】:

根据您的关注,您可以这样做来更新整个集合。

db.MyModel.find().snapshot().forEach(
function (elem) 
    db.MyModel.update(
        
            _id: elem._id
        ,
        
            $set: 
                "previous_selection": elem.current_selection
            
        
    );
);

否则,您可以通过 id 找到并使用相应的 current_selection 进行更新。

【讨论】:

.snapshot() 有什么作用? 它只是防止多次返回文档。 不错;但多次返回同一个文档,还是重复?

以上是关于Mongoose findOneAndUpdate - 使用另一个字段更新一个字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:findOneAndUpdate 不返回更新的文档

Mongoose - 使用 findOneAndUpdate 更新子文档

Mongoose `findOneAndUpdate` 回调不传递更新的文档

Mongoose `findOneAndUpdate` 回调不传递更新的文档

Mongoose:findOneAndUpdate 不适用于多种条件

Mongoose findOneAndUpdate 更新多个字段