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 に答える