Quelle est la difference entre save et insert in Mongo DB? les deux ressemble le même
db.users.save({username:"google",password:"google123"})
db.users.insert({username:"google",password:"google123"})
Quelle est la difference entre save et insert in Mongo DB? les deux ressemble le même
db.users.save({username:"google",password:"google123"})
db.users.insert({username:"google",password:"google123"})
Dans vos exemples donnés, le comportement est essentiellement le même.
save
se comporte différemment si il est transmis avec un "_id" paramètre.
Si le document contient un champ _id, puis la méthode save() effectue un upsert l'interrogation de la collection sur le champ _id:
Si un document n'existe pas spécifié _id valeur, la méthode save() effectue un insert avec les champs spécifiés dans le document.
Si un document existe avec le _id valeur, la méthode save() effectue une mise à jour, le remplacement de tous les champs dans l'enregistrement existant avec les champs du document.
En donnant un exemple
Enregistrer une Pomme
db.fruit.save({"name":"apple", "color":"red","shape":"round"})
WriteResult({ "nInserted" : 1 })
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "red",
"shape" : "round",
"name" : "apple"
}
Enregistrer une pomme avec _id précédemment sauvé apple
db.fruit.save(
{"_id" : ObjectId("53fa1809132c1f084b005cd0"),"name":"apple",
"color":"real red","shape":"round"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Maintenant, apple nous a enregistré, la couleur mise à jour du rouge au rouge
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "real red",
"shape" : "round",
"name" : "apple"
}
Enregistrer une pomme avec _id
db.fruit.save({"_id" : ObjectId("55551809132c1f084b005cd0"),
"name":"apple", "color":"real red","shape":"round"})
WriteResult({ "nMatched" : 0, "nUpserted" : 1,
"nModified" : 0, "_id": 55551809132c1f084b005cd0 })
Apple a obtenu inséré comme il n'est pas d'apple avec le même Id de l'Objet à faire une mise à jour
Insérer une Orange
db.fruit.insert({"name":"orange", "color":"orange","shape":"round"})
WriteResult({ "nInserted" : 1 })
Orange est inséré
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "real red",
"shape" : "round",
"name" : "apple"
}
{
"_id" : ObjectId("53fa196d132c1f084b005cd7"),
"color" : "orange",
"shape" : "round",
"name" : "orange"
}
{
"_id" : ObjectId("55551809132c1f084b005cd0"),
"color" : "real red",
"shape" : "round",
"name" : "apple"
}
Afin de sauver agira comme une mise à jour si elle est fournie avec un id de l'objet, à condition que l'id de l'objet existe déjà, sinon elle ne l'insertion.
Si vous essayez d'utiliser la commande "insérer" avec un ID qui a été utilisé précédemment dans la même collection, vous obtiendrez une erreur de clé en double. Si vous utilisez l'option "enregistrer" avec un ID qui est déjà dans la même collection, il sera mis à jour/écrasés.
Si vous cherchez à faire une vraie mise à jour, je vous recommande d'utiliser "mise à jour". Mise à jour n'écrase pas dans la façon de Sauver le feriez si vous enregistrez en utilisant le même IDENTIFIANT qui est déjà dans la collection.
Par exemple, vous avez deux champs "x" et "y" et vous voulez garder les deux, mais de modifier la valeur de "x". Si vous avez choisi la commande "enregistrer" et ne comporte pas de y avec la valeur précédente ou de ne pas avoir de y dans votre sauvegarde, puis y aurait plus la même valeur ou d'y être. Toutefois, si vous avez choisi de mise à jour à l'aide de $et seulement eu x inclus dans votre instruction de mise à jour, vous évitez d'y affecter.
Comme vous pouvez le voir ici, la méthode de sauvegarde fera essentiellement une requête ascendante (met à jour si elle trouve la doc, insérer autrement):
http://docs.mongodb.org/manual/reference/method/db.collection.save/#db.collection.save
Insert est juste cela, un insert droit.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.