Javascript 更新mongodb对象内部对象值的最佳方法
这就是我在mongodb集合中存储每个元素的方式Javascript 更新mongodb对象内部对象值的最佳方法,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,这就是我在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
{
_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()将以前的对象替换为新更改的对象
db.collection.update({
“_id”:id
},
{
“$inc”:{
“votesObject.生日”:1
}
})
此查询将在一个字段中增加您的字段生日
检查mongo游乐场示例您可以使用运算符
试着这样做:
db.collection.update({
“_id”:id
},
{
“$inc”:{
“votesObject.生日”:1
}
})
此查询将在一个字段中增加您的字段生日
检查mongo游乐场示例您可以使用mongoose
大概是
const updateKey = "votesObject.$."+ chosenValue
let incQuery = {}
incQuery[updateKey] = 1
Model.findOneAndUpdate(
{ _id: id },
{ $inc: incQuery },
{ new : false },
callback
)
你可以用猫鼬
大概是
const updateKey = "votesObject.$."+ chosenValue
let incQuery = {}
incQuery[updateKey] = 1
Model.findOneAndUpdate(
{ _id: id },
{ $inc: incQuery },
{ new : false },
callback
)
使用
update
功能如果您指定的是findOneAndUpdate,我已经尝试过使用findOneAndUpdate。我不知道是否还有其他方法。如果是这样,那么我不确定它是如何工作的使用update
函数如果您指定的是findOneAndUpdate,我已经尝试过使用findOneAndUpdate。我不知道是否还有其他方法。如果是这样的话,我不确定它是如何工作的。你很接近,我也是。但是这里选择的值不是特定的,它可以是存储在变量“chosenValue”中的任何东西。当我尝试执行“votesObject.”+chosenValue+“”:1As@Deepak Poojari发布时,这不起作用,解决方案是创建“查询对象”并执行查询。但我认为不能使用$
运算符。顺便说一句,如果可以的话。你和我很亲近。但是这里选择的值不是特定的,它可以是存储在变量“chosenValue”中的任何东西。当我尝试执行“votesObject.”+chosenValue+“”:1As@Deepak Poojari发布时,这不起作用,解决方案是创建“查询对象”并执行查询。但我认为不能使用$
运算符。顺便说一句,如果可行的话。你的答案非常完美。我刚把updateKey改为“votesObject”。+chosenValue,它就像一个魔咒一样工作。谢谢你,你的回答非常好。我刚把updateKey改为“votesObject”。+chosenValue,它就像一个魔咒一样工作。非常感谢。