push new value to mongodb inner array - mongodb/php

后端 未结 5 1574
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-25 13:33

i have this document in mongo:

{
   \"_id\": ObjectId(\"4d0b9c7a8b012fe287547157\"),
   \"done_by\": [\"1\"]
}

and i want to add another va

相关标签:
5条回答
  • 2020-12-25 13:57

    u can use as this :

    $conn = new Mongo();
    $q = $conn->server->gameQueue;
    $id = new MongoId("4d0b9c7a8b012fe287547157");
    $q->update(array("_id"=>$id),array('$addToSet' => array("done_by","2")));
    
    0 讨论(0)
  • 2020-12-25 14:04
    $filter = array('_id'=>$id));
    $update = array('$push'=>array('done_by'=>'2'));
    $q->update($filter,$update);
    
    0 讨论(0)
  • 2020-12-25 14:08

    $push => array('done_by' => '2')

    So says the manual: { $push : { field : value } }

    0 讨论(0)
  • 2020-12-25 14:12
    $filter = array('_id'=>$id));
    $update = array('$addToSet'=>array('done_by'=>'2'));
    $q->update($filter,$update);
    

    When you need to update use $addToSet so you avoid duplicate inserts which leads to multiple entries.

    0 讨论(0)
  • 2020-12-25 14:21

    Since neither of these answers are actually telling you what's wrong here ...

    $conn = new Mongo();
    $q = $conn->server->gameQueue;
    $id = new MongoId("4d0b9c7a8b012fe287547157");
    $q->update(array("_id"=>$id),array('$push' => array("done_by","2")));
    

    There is a problem with your $push statement, you are not pushing "done_by" with a value of "2" you are actually sending "done_by" and "2" ...

    Here is the issue ...

    array('$push' => array("done_by","2"))
    

    This should have a => not a ,

    array('$push' => array("done_by" => "2"))
    

    However, note that every time you run this it will insert another "2" if you want MongoDB to only inset "2" if it doesn't already exist in "done_by" then you should use $addToSet ...

    array('$addToSet' => array("done_by" => "2"))
    

    This statement won't add 2 everytime, only the first time.

    0 讨论(0)
提交回复
热议问题