2013-07-25 7 views
0

J'ai une collection avec des documents de ce format:demande imbriquée dans Compliqué MongoDB

{ 
     "_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} 

Je suis en train de mettre à jour la proposition accompagnée d'une carte d'identité que je reçois, dans le parent droit. J'ai trouvé a request on the Mongo cookbook que j'ai utilisé avec succès, mais sur un format de données moins compliqué, et je ne peux pas le faire fonctionner maintenant. C'est ici.

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 et eventId sont dans le bon format. Si j'utilise la partie requête de la mise à jour dans find(), j'obtiens le bon jeu. Mais j'ai du mal à voir pourquoi mon document n'est pas mis à jour.

+1

je pense que la valeur est proposals.voter user..thats y son travail non pas à cause de ce code -'proposals.voters ': {' ne de $ ': user}} – sachin

+0

Il était en effet une partie du problème :) – Simon

Répondre

1

Vous devez vous $ operator pour identifier la position dans la baie que vous souhaitez mettre à jour. Votre commande sera mise à jour:

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

Merci beaucoup! Je ne savais pas à propos de cet opérateur. – Simon

+0

Eh bien, je ne comprends pas. Je change ma demande, l'essaye, ça marche. Retiré, ça ne marche plus. – Simon

+0

Quelle est l'erreur? –