慕容708150
2023-07-06 17:30:24
這就是我在 mongodb 集合中存儲(chǔ)每個(gè)元素的方式。{ _id: 'iTIBHxAb8', title: 'happy birthday', votesObject: { happy: 0, birthday: 0 }}我做了一件非常骯臟的工作,對(duì)此我一點(diǎn)也不感到自豪,這就是......//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); });所以基本上它的作用是從上面的示例中獲取可能是“快樂(lè)”或“生日”的選定值。從集合中查找與 id 匹配的完整對(duì)象。從找到的對(duì)象中增加所選值。使用replaceOne()將之前的對(duì)象替換為新更改的對(duì)象。每次執(zhí)行這段代碼時(shí),我都會(huì)將所選值內(nèi)的值增加一。這工作得很好,但我想知道是否有任何方法可以直接更新所選值而不會(huì)出現(xiàn)這些混亂。我在其他地方找不到辦法做到這一點(diǎn)。
2 回答

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
你可以使用 mongoose?findOneAndUpdate?它將類似于
const updateKey = "votesObject.$."+ chosenValue
let incQuery = {}
incQuery[updateKey] = 1
Model.findOneAndUpdate(
? ? { _id: id },?
? ? { $inc: incQuery },
? ? { new : false },?
? ? callback
)

莫回?zé)o
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
添加回答
舉報(bào)
0/150
提交
取消