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

Aktualisierung des MongoDB-Dokuments (PHP-Codebeispiel)

齐天大圣
齐天大圣Original
2020-08-24 14:39:332353Durchsuche

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

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

$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
"$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
"$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
$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);
„$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" ] }
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);

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" ] }

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 } ] }
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'
    ]
];

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:

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

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

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!

Stellungnahme:
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