Heim > Datenbank > MongoDB > Aktualisierung des MongoDB-Dokuments (PHP-Codebeispiel)

Aktualisierung des MongoDB-Dokuments (PHP-Codebeispiel)

齐天大圣
Freigeben: 2020-08-24 18:02:10
Original
2411 Leute haben es durchsucht

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]
);
Nach dem Login kopieren

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字段不存在,则会创建该字段
Nach dem Login kopieren

Wenn Ihnen Apfel jetzt nicht gefällt und Sie zu Erdbeere wechseln möchten

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'strawberry']]
);
Nach dem Login kopieren

„$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'] 
        ]
    ]
);
Nach dem Login kopieren
Jetzt wurden 10 Punkte erreicht.
$collect->insertOne([
    'name' => 'james',
    'age' => 35,
    'brothers' => ['name' => 'wade', 'age'=> 38]
]);

$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['brothers.name' => 'paul']
    ]
);
Nach dem Login kopieren
Später habe ich 50 Punkte aufgebraucht

$collect->updateOne(['name'=>'james'],
    ['$unset' =>
        ['brothers' => '']
    ]
);
Nach dem Login kopieren

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
Nach dem Login kopieren
"$each" fügt mehrere Elemente hinzu

'$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
Nach dem Login kopieren
"$slice" behält n Elemente bei

'$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
Nach dem Login kopieren
$collect->insertOne([
     '_id' => 1,      
     'title'=>'study mongodb',      
     'create_time' => '2020-08-24 12 :31' 
]); 
$push = ['$push' => ['comments' => 'comments1'] ]; 
$collect->updateOne(['_id' => 1 ], $push);
Nach dem Login kopieren
$push = [    
     '$push' => 
         ['comments' => 
             ['$each' => ['comment1', 'comment2', 'comment3']]
         ] 
      ]; 
$collect->updateOne(['_id' => 1 ], $push);
Nach dem Login kopieren
„$sort“-Sortierung

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" ] }
Nach dem Login kopieren
Sehen wir uns an, wie die Daten in der Sammlung aussehen:
$push = [
     '$push' => [ 
        'comment' => [ 
            '$each' => ['comment7', 'comment8', 'comment9'],                                '$slice' => -3 
        ],
     ], 
]; 
$collect->updateOne(['_id' => 1 ], $push);
Nach dem Login kopieren

Beachten Sie, dass Sie nicht einfach „$slice“ oder „$sort“ mit „$push“ verwenden können, sondern „$each“ verwenden müssen. .

„$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" ] }
Nach dem Login kopieren

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]
        ],
    ],
];
Nach dem Login kopieren

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 } ] }
Nach dem Login kopieren
Sie können bestimmte Elemente auch über „$pull“ löschen

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

$update = [
    '$addToSet' => [
        'fruits' => 'apple'
    ]
];
Nach dem Login kopieren

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);
Nach dem Login kopieren
$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);
Nach dem Login kopieren

Mehrere Dokumente aktualisieren

Das Aktualisieren mehrerer Dokumente erfordert die updateMany()-Methode. Die Demonstration ist wie folgt:

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear', 'apple', 'banana', 'orange']
]);

#从数组末删除
$update = [
    '$pull' => [
        'fruits' => 'apple'
    ]
];
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage