如何在mongoDB中增加动态属性的值

时间:2019-06-02 20:38:02

标签: javascript mongodb

我正尝试在数据库中增加一个取决于用户标记的动态值,可以说有一个带有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”行不是这样工作的,怎么可能呢?

谢谢。

1 个答案:

答案 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 }
);