2016-04-07 21 views
0

Ich versuche, ein Update auf meine Dokumente auszuführen, ich benutze upsert True, aber es immer noch überschreiben?MongoDB Upsert funktioniert nicht in PHP

$col = "A" . $user->agencyID; 
$db = $m->rules; 
$collection = $db->$col; 

$validValue = $_POST['validValue']; 
$id = $_POST['ruleID']; 

$document = array(
    'tags' => array(
       $validValue 
      ) 
); 


$collection->update(
    array(
     '_id' => new MongoId($id) 
    ), 
    array('$set' => $document), 
    array('upsert'=>true) 
); 

$validValue ist wie - Foo Bar

Der erste Wert in fein geht, aber wenn ich versuche, einen anderen Wert Hinzufügen überschreibt er die erste?

+0

Was ist '$ id'? Wenn es sich um eine benutzerdefinierte Zeichenfolge handelt und nicht um ein Mongoid, brauchen Sie keine neue MongoId. – luckytaxi

+0

@luckytaxi meine $ id ist das - 5704fd6eb23eec37168b4567 – Kieron606

+0

Was wird überschrieben? Dein erster Wert ist "Foo Bar" und du aktualisierst ihn mit "Hello World". Was erwarten Sie? – luckytaxi

Antwort

0

ich es geschafft, das Problem herauszufinden, ich brauchte $addToSet und auch das Array nehmen benötigt() von arround meine $validValue

+0

Fügen Sie keine eigene Antwort als Antwort auf Ihre Frage hinzu. – luckytaxi

+0

@luckytaxi Sie haben versucht, die Antwort von mir zu stehlen. Stehlen Sie keine Antworten, Ihre Antwort funktioniert auch nicht. – Kieron606

+0

Der beste Teil ist, dass ich erwähnte, dass mein Code nicht getestet wurde und niemand außer mir auf Ihre Frage geantwortet hat. Ich war gerade dabei, eine Lösung für Sie zu finden, daher hatte ich meine Antwort ein wenig nach Ihrer eingereicht. Viel Glück, zukünftige Antworten von der Community zu bekommen. Ich werde dir bestimmt nicht helfen. – luckytaxi

1

Eigentlich $addToSet verwenden, die einen Wert in das Array nicht schieben, wenn es bereits vorhanden ist. Dieser Code wurde nicht getestet. Bitte ändern Sie ihn entsprechend Ihren Anforderungen.

$col = "A" . $user->agencyID; 
$db = $m->rules; 
$collection = $db->$col; 

$validValue = $_POST['validValue']; 
$id = $_POST['ruleID']; 

$document = array(
    'tags' => array(
      $validValue 
    ) 
); 


$collection->update(
    array(
     '_id' => new MongoId($id) 
    ), 
    array('$addToSet' => array('tags' => $document)) 
); 
Verwandte Themen