0

我有一个包含这种格式的文档的集合:

{
        "_id" : ObjectId("51b1e27e31b1f4fe0700001b"),
        "proposals" : [
                {
                        "id" : 17,
                        "type" : "question",
                        "fr" : {nothing useful},
                        "en" : {nothing useful},
                        "vote_count" : 0,
                        "validate" : 0,
                        "username" : "username",
                        "voters" : [ ],
                        "creationDate" : ISODate("2013-07-25T08:32:40.328Z")
                }, 
                {other proposals of the same type}
         ]
},
{same format}

我正在尝试在正确的父项中更新与我收到的 ID 匹配的提案。我在我成功使用的 Mongo 食谱上找到了一个请求,但数据格式不太复杂,我现在无法让它工作。这里是。

client.collection('games').update({_id: gameId, 'proposals.id': eventId, 'proposals.voters': {'$ne': user}}, {'$push': {'proposals.voters': user}, '$inc': {'proposals.vote_count': 1}, '$set': {'proposals.validate': 1}});

gameId 和 eventId 格式正确。如果我在 find() 中使用更新的查询部分,我会得到正确的游戏。但我很难理解为什么我的文档没有更新。

4

1 回答 1

1

您必须使用$ 运算符来确定要更新的数组中的哪个位置。您的更新命令将是:

client.collection('games')
.update( 
    {
        _id: gameId, 
        'proposals.id': eventId, 
        'proposals.voters': {'$ne': user}
    }, 
    {
        '$push': {'proposals.$.voters': user},
        '$inc': {'proposals.$.vote_count': vote}, 
        '$set': {'proposals.$.validate': 1}
    }
);
于 2013-07-25T12:09:52.307 回答