为了账号安全,请及时绑定邮箱和手机立即绑定

更新 mongodb 对象内对象值的最佳方法

更新 mongodb 对象内对象值的最佳方法

慕容708150 2023-07-06 17:30:24
这就是我在 mongodb 集合中存储每个元素的方式。{  _id: 'iTIBHxAb8',  title: 'happy birthday',  votesObject: { happy: 0, birthday: 0 }}我做了一件非常肮脏的工作,对此我一点也不感到自豪,这就是......//queryObject= {id,chosenvalue};let queryObject = req.query;let id = Object.keys(queryObject)[0];let chosenValue = queryObject[id];db.collection("voting")            .find({ _id: id })            .toArray((err, data) => {                let { votesObject } = data[0];                votesObject[chosenValue] += 1;                data[0].votesObject = votesObject;                db.collection("voting").replaceOne({ _id: id }, data[0]);                res.redirect("/polls?id=" + id);            });所以基本上它的作用是从上面的示例中获取可能是“快乐”或“生日”的选定值。从集合中查找与 id 匹配的完整对象。从找到的对象中增加所选值。使用replaceOne()将之前的对象替换为新更改的对象。每次执行这段代码时,我都会将所选值内的值增加一。这工作得很好,但我想知道是否有任何方法可以直接更新所选值而不会出现这些混乱。我在其他地方找不到办法做到这一点。
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

你可以使用 mongoose findOneAndUpdate 它将类似于

const updateKey = "votesObject.$."+ chosenValue

let incQuery = {}

incQuery[updateKey] = 1


Model.findOneAndUpdate(

    { _id: id }, 

    { $inc: incQuery },

    { new : false }, 

    callback

)


查看完整回答
反对 回复 2023-07-06
?
莫回无

TA贡献1865条经验 获得超7个赞

您可以使用$inc运算符。

尝试这样的事情:

db.collection.update({

  "_id": id

},

{

  "$inc": {

    "votesObject.birthday": 1

  }

})

此查询会将您的字段加birthday一。





查看完整回答
反对 回复 2023-07-06
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信