Maison > base de données > MongoDB > le corps du texte

Mise à jour du document MongoDB (exemple de code php)

齐天大圣
Libérer: 2020-08-24 18:02:10
original
2369 Les gens l'ont consulté

Les documents de mise à jour de MongoDB sont divisés en deux catégories :

  • remplacement de document, qui remplace complètement l'ancien document par le nouveau document

  • modificateur , Modifier certains documents

Remplacement de documents

L'utilisation du remplacement de documents est très simple, voyons la démonstration ci-dessous :

$collect->insertOne(['name' => 'lakers', 'nums'=> 16]);
$collect->replaceOne(
    ['name'=>'lakers'], 
    ['name' => 'heat', 'nums'=>3]
);
Copier après la connexion

Utilisez des modificateurs pour effectuer des opérations de mise à jour plus complexes, telles que la modification, l'ajout ou la suppression de clés.

Modificateur "$set"

"$set" est utilisé pour spécifier la valeur d'un champ. Si ce champ n'existe pas, créez-le.

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
]);

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'apple']]
);
// fruit字段不存在,则会创建该字段
Copier après la connexion

Si vous n'aimez pas la pomme maintenant et que vous souhaitez passer à la fraise

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'strawberry']]
);
Copier après la connexion

"$set" peut également modifier le type de clé.

# 不止喜欢草莓,还喜欢梨子、香蕉。
$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['fruit' => 
            ['strawberry', 'banana', 'pear'] 
        ]
    ]
);
Copier après la connexion

"$set" peut également modifier les documents intégrés

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
    'brothers' => ['name' => 'wade', 'age'=> 38]
]);

$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['brothers.name' => 'paul']
    ]
);
Copier après la connexion

Modificateur "$unset"

Utiliser" Le $ le modificateur unset" peut supprimer le champ spécifié

$collect->updateOne(['name'=>'james'],
    ['$unset' =>
        ['brothers' => '']
    ]
);
Copier après la connexion

le modificateur "$inc", augmenter ou diminuer la valeur

et "$set" Like le modificateur, si le champ n'existe pas, il sera automatiquement créé. Remarque : Cette valeur de champ ne peut être que des nombres.

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 61]
    ]
);
## 现有积分61
Copier après la connexion

Maintenant, 10 points ont été obtenus.

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 10]
    ]
);
## 现有积分71
Copier après la connexion

Plus tard, j'ai dépensé 50 points

$collect->updateOne(['name'=>'james'],
     ['$inc' =>['scores' => -50]
 ] ); 
 ## 现有积分21
Copier après la connexion

Array Modifier

MongoDB fournit des modifications spéciales pour la méthode des tableaux.

"$push" ajoute des éléments

"$push" peut ajouter des éléments au tableau Si le tableau n'existe pas, il le fera. Créez automatiquement un tableau. Il existe maintenant un document utilisé pour enregistrer les données de l'article :

$collect->insertOne([
     '_id' => 1,      
     'title'=>'study mongodb',      
     'create_time' => '2020-08-24 12 :31' 
]); 
$push = ['$push' => ['comments' => 'comments1'] ]; 
$collect->updateOne(['_id' => 1 ], $push);
Copier après la connexion

"$each" ajoute plusieurs éléments

'$push' peut être disposé en tableau at once Element, si vous souhaitez ajouter plusieurs éléments à la fois, vous devez utiliser « $each ».

$push = [    
     '$push' => 
         ['comments' => 
             ['$each' => ['comment1', 'comment2', 'comment3']]
         ] 
      ]; 
$collect->updateOne(['_id' => 1 ], $push);
Copier après la connexion

"$slice" conserve n éléments

'$push' et '$slicet' sont utilisés ensemble pour conserver les n derniers éléments Data, la valeur de « $slice » ne peut être que des entiers négatifs. Par exemple, je souhaite uniquement conserver les 3 derniers commentaires :

# 目前数据如下
 > db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment1", "comment2", "comment3", "comment4", "comment5", "comment6" ] }
Copier après la connexion
$push = [
     '$push' => [ 
        'comment' => [ 
            '$each' => ['comment7', 'comment8', 'comment9'],                                '$slice' => -3 
        ],
     ], 
]; 
$collect->updateOne(['_id' => 1 ], $push);
Copier après la connexion
# 现数据如下 
db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment7", "comment8", "comment9" ] }
Copier après la connexion

Le tri "$sort"

peut également être utilisé avec '$ sort' , conservez les 3 commentaires avec le plus de likes.

# 目前是集合内是空的,么有任何文档
$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]
        ],
    ],
];
Copier après la connexion

Regardons à quoi ressemblent les données de la collection :

> 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 } ] }
Copier après la connexion

Notez que vous ne pouvez pas simplement utiliser "$slice" ou "$sort" avec "$push ", et vous devez utiliser "$each".

"$addToSet" évite d'insérer des données en double

Lorsque vous utilisez "$addToSet" pour ajouter de nouveaux éléments de tableau, vous pouvez éviter ajout de données en double, telles que

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

$update = [
    '$addToSet' => [
        'fruits' => 'apple'
    ]
];
Copier après la connexion

La modification ci-dessus ne réussira pas car Apple existe déjà. '$addToSet' peut également être utilisé avec "$each" pour insérer plusieurs éléments de tableau.

$update = [
    '$addToSet' => [
        'fruits' => [
            '$each' => ['apple', 'banana', 'orange']
        ]
    ]
];
$collect->updateOne(['_id' => 1], $update);
Copier après la connexion

Supprimer l'élément

Vous pouvez supprimer l'élément le plus à gauche ou le plus à droite via "$pop".

$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);
Copier après la connexion

Vous pouvez également supprimer l'élément spécifié via '$pull'

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

#从数组末删除
$update = [
    '$pull' => [
        'fruits' => 'apple'
    ]
];
Copier après la connexion

Tous les éléments Apple du tableau ont été supprimés

upsert

upsert est un type particulier de mise à jour. Mais si un ensemble répondant aux conditions est trouvé, ce sera le même que la modification précédente. Si aucune collection répondant aux conditions n'est trouvée, elle sera insérée dans la collection en tant que nouveau document en utilisant les conditions de requête et le document modifié.

Ci-dessous, prenons comme exemple un scénario que nous rencontrons souvent : enregistrer le nombre de fois que chaque IP est consultée. S'il s'agit d'une nouvelle IP, elle est ajoutée à la collection. Si elle existe déjà, la collection d'origine est modifiée.

$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);

$collect->updateOne(['ip' => '127.0.0.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);


$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);
Copier après la connexion
> db.users.find()
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2df"), "ip" : "116.31.23.1", "views" : 2 }
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2e1"), "ip" : "127.0.0.1", "views" : 1 }
Copier après la connexion

Mise à jour de plusieurs documents

La mise à jour de plusieurs documents nécessite l'utilisation de la méthode updateMany(), comme illustré ci-dessous :

$collect->insertMany([
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
]);

$collect->updateMany([
    'name' => 'gwx'
],
    ['$set' =>['age' => 18]]
);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal