【问题标题】:After updating the document By findOneAndUpdate both documents become same通过 findOneAndUpdate 更新文档后,两个文档变得相同
【发布时间】:2018-11-15 19:04:07
【问题描述】:

我想用 findOneAndUpdate 按字段名称(riderUserId)更新文档

它所做的不是通过 RiderUserId 更新文档

updateProfile: function(req, res) {
        var riderUserID = req.params.riderUserID;
        profileModel.findOneAndUpdate(riderUserID, req.body,
            { overwrite: true, new: true }, (error, response) => {
            if (error) {
                res.json(error);
                console.error(error);
                return;
            }
            res.json(response);
       });
    },

这是我的模特

var profileSchema = new Schema({
    name: { type: String },
    surname: { type: String },
    gender: { type: String },
    email: { type: String },
    riderUserId: { type: String },
    mobileNumber: { type: Number },
    birthYear: { type: Number },
    nationality: { type: String },
    idNumber: { type: String },
    quickDescription: { type: String },
    numberPlate: { type: String },
    make: { type: Number },
    model: { type: String },
    memberType: { type: String },
    accountHolderName: { type: String },
    accountNumber: { type: Number },
    nameOfBank: { type: String },
    branchCode: { type: Number },
    profilePicture: { type: String },
    carPicture: { type: String },
    music: { type: String },
    conversations: { type: String },
    pets: { type: String },
    smoking: { type: String },
    emailVerification: { type: Boolean },
    phoneVerification: { type: Boolean },
    idVerification: { type: Boolean },
 });

这里有两个文件,

     { 
    "_id" : ObjectId("5bed37dc84fd420002791e0c"), 
    "email" : "shoba.hasini@gmail.com", 
    "riderUserId" : "ZH8irbzGt8WULt2lFSIU5J48Alz2", 
    "name" : "Shoba", 
    "surname" : "Hasini", 
    "gender" : "", 
    "mobileNumber" : null, 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("5bed37f484fd420002791e0d"), 
    "email" : "kartikajas@gmail.com", 
    "riderUserId" : "e1FUpfsDiwSVxcz50ZbhjWKfKGM2", 
    "name" : "Karthik", 
    "surname" : "Keyan", 
    "gender" : "", 
    "mobileNumber" : null, 
    "__v" : NumberInt(0)
}

通过 findOneAndUpdate 更新文档后,两个文档变得相同

,{

    "_id" : ObjectId("5bed37dc84fd420002791e0c"), 
    "name" : "Karthik", 
    "surname" : "Keyan", 
    "gender" : "male", 
    "email" : "kartikajas@gmail.com", 
    "riderUserId" : "e1FUpfsDiwSVxcz50ZbhjWKfKGM2", 
    "mobileNumber" : NumberInt(90087),     
    "idVerification" : false
}
{ 
    "_id" : ObjectId("5bed37f484fd420002791e0d"), 
    "email" : "kartikajas@gmail.com", 
    "riderUserId" : "e1FUpfsDiwSVxcz50ZbhjWKfKGM2", 
    "name" : "Karthik", 
    "surname" : "Keyan", 
    "gender" : "", 
    "mobileNumber" : null, 
    "__v" : NumberInt(0)
}

为什么不更新一个带有 RiderId e1FUpfsDiwSVxcz50ZbhjWKfKGM2 的文档

【问题讨论】:

  • 为简洁起见,我删除了几个字段。
  • 在您的代码中,您将riderUserID(这是一个字符串)传递给findOneAndUpdate。但猫鼬实际上将Object 作为输入。您可能需要传递像{ _id: riderUserID } 这样的对象。如果您的 RiderUserID 是 mongo object idmongoosejs.com/docs/api.html#model_Model.findOneAndUpdate
  • 什么意思?
  • rideruserid 不是 mongo 对象 id
  • 从您的Schema 我可以看到您的riderUserID 是一个字符串。将findOneAndUpdate(riderUserID, ... 替换为findOneAndUpdate({ riderUserID }, ... 并尝试。

标签: node.js mongodb express mongoose


【解决方案1】:

在您的代码中,您将riderUserID(这是一个字符串)传递给findOneAndUpdate。但猫鼬实际上将Object 作为搜索查询参数。您可能需要传递像 { _id: RiderUserID } 这样的对象。如果您的 RiderUserID 是 mongo 对象 ID。

从您的架构中,我可以看到您的 RiderUserID 是一个字符串。将findOneAndUpdate(riderUserID, ... 替换为findOneAndUpdate({ riderUserID }, ... 并尝试。

更多信息

https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2019-03-06
    • 2019-07-20
    • 2016-10-15
    • 2017-08-13
    • 2022-08-02
    • 2018-10-22
    • 2014-02-26
    相关资源
    最近更新 更多