首页 > 解决方案 > 如何从猫鼬中传递的对象更新一个字段

问题描述

万一我有一个看起来像下面的对象

const auth = {
        geohash: args.input.geohash,
        offenses: args.input.offenses,
        online: args.input.online,
        paid: args.input.paid,
        profilePic: args.input.profilePic,
        username: args.input.username,
    }

我通过它以更新文档

const update = { _id: mongoose.Types.ObjectId(args._id) }
    const value = await DiscoverUsers.findOneAndUpdate(update, auth, { useFindAndModify: false, new: true })

所以如果我只想更新用户名,我不想继续创建一个突变来更新文档中的每个字段。假设我的突变看起来像这样

 mutation{
  updateDiscoverUsers(_id:"5dab7c198a83f235c89a964a",input:{username:"peter"}){
    username
  }
}

但这只会更新用户名,但它会使其余字段为空,但我只想找到一种方法来仅更新我在突变中传递的字段,其余字段保持不变。所以我只能更新用户名和 profilePic,其余的保持不变。我将不胜感激,并提前致谢

标签: mongodbmongoosegraphql

解决方案


您应该使用原子运算符$set仅在您想要的地方进行更新,并且您应该只传递您想要更新的字段,而不是所有字段,否则所有字段都将被新值更新。

喜欢:

const value = await DiscoverUsers.findOneAndUpdate(update, {$set:{username:"pedro"}}, { useFindAndModify: false, new: true })

推荐阅读