如果数组中存在记录,则Mongoose会更新单个属性

时间:2017-01-26 09:29:08

标签: node.js mongodb mongoose mongoose-schema

我的用户架构如下所示:

var userSchema = mongoose.Schema({
  ...
  ask_history: [
            {
                user_question_body: {
                    type: String
                },
                favorite: {
                    type: Boolean,
                    default: false
                },
                ask_time: {
                    type: Date,
                    default: Date.now
                }
            }
        ]
})

我目前的更新方法如下:

User.findOneAndUpdate({
        "_id": user_id,
        ask_history.user_question_body: {
            $ne: "an input string"
        }
    }, {
        "$addToSet": {
            ask_history: {
                user_question_body: "an input string"
            }
        }
    }, function(err, doc) {
        if (err)
            throw err; // handle error;
        }
    );

如何添加功能,如果我准备好在ask_history数组中有{user_question_body:“输入字符串”}的记录,则将{ask_time}更新为当前更新时间。

1 个答案:

答案 0 :(得分:1)

要更新匹配文档的aks_time,您应该使用$positional operator

User.findOneAndUpdate({
        "_id": user_id,
        "ask_history.user_question_body": "an input string"
    }, {
        "$set": {"ask_history.$.ask_time": new Date()}
    },{new:true, upsert: true}, function(err, doc) {
        if (err)
            throw err; // handle error;
        }
        console.log(doc)
    );