我正尝试在数据库中增加一个取决于用户标记的动态值,可以说有一个带有3个参数的“投票”对象:
//data structure :
_id : someObjectId,
gameId : someObjectId,
votes : {
a: 0,
b: 0,
c: 0
}
userVote = { vote: 'b', gameId: '5cf3c5cc1c9d44000053defb' }
function addVote(userVote) {
userVote.gameId = new ObjectId(userVote.gameId)
return mongoService.connect()
.then(db => {
const collection = db.collection('totalVotes');
return collection.updateOne(
{ gameId: userVote.gameId },
{ $inc: { "votes[userVote[vote]":1 } }
)
})
}
所以,当然,“ inc”行不是这样工作的,怎么可能呢?
谢谢。
答案 0 :(得分:0)
MongoDB无法知道votes[userVote[vote]
的含义(不包括语法错误)。它无权访问您的客户端JavaScript。如果要动态设置,请将$inc
行更改为以下内容:
{ $inc: { ["votes." + userVote.vote] : 1 } }
如果不支持以上括号表示法,则可以尝试以下类似方法:
let incVote = {};
incVote["votes." + userVote.vote] = 1;
return collection.updateOne(
{ gameId: userVote.gameId },
{ $inc: incVote }
);