猫鼬findOneAndUpdate不会更新多个嵌套字段

时间:2019-05-09 14:42:42

标签: node.js mongodb mongoose mongodb-query

问题:我正在尝试使用findOneAndUpdate更新MongoDb中的一些嵌套字段,但它仅更新一个字段(日期)而不是所有字段,实际上,如果我删除了“日期”字段,什么也不更新。

方案

const UserSchema = new Schema({
    info : {
         geolocation: {
              latitude: String,
              longitude: String,
              date: Date
         }
    }
})

我的声明:

User.findOneAndUpdate (
    {"_id": id},
    {"$set": {
            'info.geolocation.latitude': 'test-lat',
            'info.geolocation.longitude': 'test-long',
            'info.geolocation.date': moment()
        }
    }).exec(function (err, doc) {
        if (err) {
            mongodb.desconectMDB();
            return res.status(500).send({
                message: 'error'
            });
        } else {
            console.log(doc);
            return  res.status(200).send({
                message: 'success'
            });
        }
    }
);

(我已经在这里Mongoose findOneAndUpdate Updating Multiple Fields接受了答案,这与我的问题类似,但是在我的情况下不起作用)

1 个答案:

答案 0 :(得分:0)

它未在您的bdd或console中更新。日志(doc)只是显示了错误的信息?

如果console.log(doc)返回错误信息,只需添加以下选项({new:true})以返回更新的文档:

User.findOneAndUpdate (
{"_id": id},
{"$set": {
        'info.geolocation.latitude': 'test-lat',
        'info.geolocation.longitude': 'test-long',
        'info.geolocation.date': moment()
    }
},
{new: true}).exec(....