MongoDB-Aktualisierungsdokumente sind in zwei Kategorien unterteilt:
Dokumentenersetzung, altes Dokument vollständig durch ein neues Dokument ersetzen
Modifikator, einige Dokumente ändern
Dokumentenersetzung
Dokumentenersetzung verwenden Es ist ganz einfach, schauen wir uns die Demo an:
$collect->insertOne(['name' => 'lakers', 'nums'=> 16]); $collect->replaceOne( ['name'=>'lakers'], ['name' => 'heat', 'nums'=>3] );
Verwenden Sie Modifikatoren, um komplexere Aktualisierungsvorgänge durchzuführen, wie zum Beispiel das Ändern, Hinzufügen oder Löschen von Schlüsseln.
Modifikator „$set“
„$set“ wird verwendet, um den Wert eines Feldes anzugeben. Wenn dieses Feld nicht vorhanden ist, erstellen Sie es.
$collect->insertOne([ 'name' => 'james', 'age' => 35, ]); $collect->updateOne(['name'=>'james'], ['$set' => ['fruit' => 'apple']] ); // fruit字段不存在,则会创建该字段
Wenn Ihnen Apfel jetzt nicht gefällt und Sie zu Erdbeere wechseln möchten
$collect->updateOne(['name'=>'james'], ['$set' => ['fruit' => 'strawberry']] );
„$set“ kann auch den Schlüsseltyp ändern. „$set“ kann auch eingebettete Dokumente ändern der Wert
Gleiche wie der Modifikator „$set“. Wenn das Feld nicht vorhanden ist, wird es automatisch erstellt. Hinweis: Dieser Feldwert kann nur Zahlen sein. # 不止喜欢草莓,还喜欢梨子、香蕉。
$collect->updateOne(['name'=>'james'],
['$set' =>
['fruit' =>
['strawberry', 'banana', 'pear']
]
]
);
$collect->insertOne([
'name' => 'james',
'age' => 35,
'brothers' => ['name' => 'wade', 'age'=> 38]
]);
$collect->updateOne(['name'=>'james'],
['$set' =>
['brothers.name' => 'paul']
]
);
$collect->updateOne(['name'=>'james'], ['$unset' => ['brothers' => ''] ] );
Array-ModifikatorMongoDB bietet spezielle Modifikationsmethoden für Arrays.
„$push“ fügt Elemente hinzu
„$push“ kann Elemente zum Array hinzufügen. Wenn das Array nicht vorhanden ist, wird das Array automatisch erstellt. Es gibt jetzt ein Dokument zum Speichern von Artikeldaten: $collect->updateOne(['name'=>'james'],
['$inc' =>
['scores' => 61]
]
);
## 现有积分61
'$push' kann Elemente gleichzeitig anordnen. Wenn Sie mehrere Elemente gleichzeitig hinzufügen möchten, müssen Sie dies tun verwenden Sie es zusammen' $each'. $collect->updateOne(['name'=>'james'],
['$inc' =>
['scores' => 10]
]
);
## 现有积分71
'$push' und '$slicet' werden zusammen verwendet, um die neuesten n Datenstücke beizubehalten. Der Wert von '$slice' kann nur eine negative ganze Zahl sein . Ich möchte zum Beispiel nur die letzten 3 Kommentare behalten: $collect->updateOne(['name'=>'james'],
['$inc' =>['scores' => -50]
] );
## 现有积分21
$collect->insertOne([
'_id' => 1,
'title'=>'study mongodb',
'create_time' => '2020-08-24 12 :31'
]);
$push = ['$push' => ['comments' => 'comments1'] ];
$collect->updateOne(['_id' => 1 ], $push);
$push = [
'$push' =>
['comments' =>
['$each' => ['comment1', 'comment2', 'comment3']]
]
];
$collect->updateOne(['_id' => 1 ], $push);
kann auch mit „$sort“ verwendet werden, um die 3 Kommentare mit den meisten Likes zu behalten. # 目前数据如下
> db.users.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment1", "comment2", "comment3", "comment4", "comment5", "comment6" ] }
$push = [
'$push' => [
'comment' => [
'$each' => ['comment7', 'comment8', 'comment9'], '$slice' => -3
],
],
];
$collect->updateOne(['_id' => 1 ], $push);
„$addToSet“ vermeidet das Einfügen doppelter Daten
Wenn Sie „$addToSet“ zum Hinzufügen neuer Array-Elemente verwenden, können Sie das Hinzufügen doppelter Daten vermeiden, z. B.
# 现数据如下 db.users.find() { "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment7", "comment8", "comment9" ] }
Die obige Änderung wird nicht erfolgreich sein, da Apple dies bereits getan hat existiert. „$addToSet“ kann auch mit „$each“ verwendet werden, um mehrere Array-Elemente einzufügen.
# 目前是集合内是空的,么有任何文档 $collect->insertOne(['_id' => 1, 'title'=>'study mongodb', 'create_time' => '2020-08-24 12:31']); $push = [ '$push' => [ 'comment' => [ '$each' => [ ['comment' => 'php', 'like' => 100], ['comment' => 'mysql', 'like' => 10], ['comment' => 'linux', 'like' => 200], ['comment' => 'java', 'like' => 1000], ['comment' => 'nginx', 'like' => 300], ['comment' => 'composer', 'like' => 500], ], '$slice' => -3, '$sort' => ['like' => 1] ], ], ];
Elemente löschen
Sie können das Element ganz links oder ganz rechts über „$pop“ löschen. > db.users.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ { "comment" : "nginx", "like" : 300 }, { "comment" : "composer", "like" : 500 }, { "comment" : "java", "like" : 1000 } ] }
$collect->insertOne([ '_id' => 1, 'name' => 'gwx', 'age' => 30, 'fruits' => ['apple', 'pear'] ]); $update = [ '$addToSet' => [ 'fruits' => 'apple' ] ];
Im Array sind alle Apple-Elemente gelöscht
upsertupsert ist ein spezielles Update. Wenn jedoch ein Satz gefunden wird, der die Bedingungen erfüllt, ist er mit der vorherigen Änderung identisch. Wenn keine Sammlung gefunden wird, die die Bedingungen erfüllt, wird sie unter Verwendung der Abfragebedingungen und des geänderten Dokuments als neues Dokument in die Sammlung eingefügt.
Im Folgenden nehmen wir als Beispiel ein Szenario, das uns oft begegnet: die Aufzeichnung der Häufigkeit, mit der jede IP aufgerufen wird. Wenn es sich um eine neue IP handelt, wird sie der Sammlung hinzugefügt. Wenn sie bereits vorhanden ist, wird die ursprüngliche Sammlung geändert.
$update = [ '$addToSet' => [ 'fruits' => [ '$each' => ['apple', 'banana', 'orange'] ] ] ]; $collect->updateOne(['_id' => 1], $update);
$collect->insertOne([ '_id' => 1, 'name' => 'gwx', 'age' => 30, 'fruits' => ['apple', 'pear'] ]); #从数组末删除1个元素 $update = [ '$pop' => [ 'fruits' => 1 ] ]; $collect->updateOne(['_id' => 1], $update); # 从数组头删除一个元素 $update = [ '$pop' => [ 'fruits' => -1 ] ]; $collect->updateOne(['_id' => 1], $update);
Mehrere Dokumente aktualisieren
Das Aktualisieren mehrerer Dokumente erfordert die updateMany()-Methode. Die Demonstration ist wie folgt: Das obige ist der detaillierte Inhalt vonAktualisierung des MongoDB-Dokuments (PHP-Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!$collect->insertOne([
'_id' => 1,
'name' => 'gwx',
'age' => 30,
'fruits' => ['apple', 'pear', 'apple', 'banana', 'orange']
]);
#从数组末删除
$update = [
'$pull' => [
'fruits' => 'apple'
]
];