Node.js MongoDB中复杂的嵌套请求

Node.js MongoDB中复杂的嵌套请求,node.js,mongodb,nosql,Node.js,Mongodb,Nosql,我收集了以下格式的文件: { "_id" : ObjectId("51b1e27e31b1f4fe0700001b"), "proposals" : [ { "id" : 17, "type" : "question", "fr" : {nothing useful},

我收集了以下格式的文件:

{
        "_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匹配的建议,在正确的父项中。我发现我成功地使用了,但使用的是不太复杂的数据格式,我现在无法让它工作。给你

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()中使用更新的查询部分,我就得到了正确的游戏。但我很难理解为什么我的文档没有更新。

您必须确定要更新阵列中的哪个位置。您的更新命令将是:

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

谢谢!我不知道这个接线员,我不明白。我改变了我的要求,尝试了,成功了。再试一次,它不工作了,没有了。它只是不更新。考虑到它第一次工作,这很奇怪。我多次测试了更新查询并正常工作。检查您的查找查询是否正确。在查找查询中,提案和投票者之间缺少$。我不明白为什么它第一次起作用。谢谢!我认为Propositions.voter值是用户..这是因为代码-'Propositions.votters':{'$ne':user}它确实是问题的一部分:)