recherche

Maison  >  Questions et réponses  >  le corps du texte

mongodb "$" 操作符问题

测试数据:

{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : 
"ABC", 
  "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
"votes" : 7 } ] } 

执行更新语句:

语句一:

db.mydb.update({title:"ABC"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行报错:Cannot apply the positional operator without a corresponding query field containing an array.

语句二:

db.mydb.update({"comments.by":"joe"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行结果正常

请问是怎么回事?

天蓬老师天蓬老师2768 Il y a quelques jours647

répondre à tous(2)je répondrai

  • PHPz

    PHPz2017-04-21 11:18:52

     "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
    "votes" : 7 } ]

    Ici, les commentaires sont un tableau (voir message d'erreur). Si vous souhaitez mettre à jour, vous devez parcourir

    .

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-21 11:18:52

    Ce que vous avez dit ci-dessus est correct, les commentaires sont un tableau, mais il n'est pas nécessaire de le parcourir. Le "$" utilisé par l'affiche est la solution. Je l'ai juste mal utilisé. Jetons un coup d'œil à ce que $ signifie.

    Dans les deux premiers paramètres de mise à jour, <conditions de requête> et <opération de mise à jour>, si le contenu que vous interrogez dans <conditions de requête> est le contenu du tableau, dans <opération de mise à jour> "$" pour faire référence à l'élément correspondant dans la requête précédente.

    Votre deuxième exemple consiste à interroger un tableau. Dans le premier exemple, vous avez trouvé le document de title="ABC" et les conditions de requête ici ne contiennent pas de tableau. En fait, vous pouvez écrire les conditions de requête dans les deux exemples ensemble, interroger title="..." et avoir le document où Joe. a laissé un message, puis ajoutez +1 au vote du message de Joe trouvé

    .

    répondre
    0
  • Annulerrépondre