En sus ejemplos dados, el comportamiento es esencialmente el mismo.
save se comporta de manera diferente si se pasa con un parámetro "_id".
Para guardar, si el documento contiene _id, se mantendrá al consultar la colección en el _idcampo, de lo contrario, se insertará.
Si un documento no existe con el valor _id especificado, el método save () realiza una inserción con los campos especificados en el documento.
Si existe un documento con el valor _id especificado, el método save () realiza una actualización, reemplazando todos los campos del registro existente con los campos del documento.
Guardar vs Actualizar :
updatemodifica un documento existente que coincide con sus parámetros de consulta. Si no existe dicho documento coincidente, es cuando upsertaparece la imagen.
upsert : false : No pasa nada cuando no existe dicho documento
upsert : true : Se crea un nuevo documento con contenidos iguales a los parámetros de consulta y parámetros de actualización
save: No permite ningún parámetro de consulta. si _idexiste y hay un documento coincidente con el mismo _id, lo reemplaza. Cuando no se especifica _id / ningún documento coincidente, inserta el documento como uno nuevo.
Ambos tienen una sintaxis diferente. La actualización toma múltiples argumentos ({condición}, {actualizar a doc}, upsert, multi) mientras que guardar acepta solo un argumento (_id es el parámetro para el argumento condicional) .update puede aceptar cualquier condición, pero guardar tiene la limitación de condición solo en el _id campo.
Save()/ \
/ \
Having _id NotHaving _id
->Inthiscase save will do->It will do normal insertion
upsert to insert.Now in thiscase as insert()do.
what that means, it means
take the document and replace
the complete document having same
_id.
Consideremos los dos casos aquí para insertar: -
1) Tener _id de doc en la colección.
2) No tener _id de doc en la colección.
Insert()/ \
/ \
DocHaving _id in collection DocNotHaving _id
-> E11000 duplicate key ->Insert a new doc inside the collection.
error index:
Por lo tanto, guardar actuará como una actualización si se suministra con una identificación de objeto, siempre que la identificación del objeto ya exista de otra manera, hace una inserción.
Si intenta utilizar "insertar" con una ID que se utilizó anteriormente en la misma colección, obtendrá un error de clave duplicada. Si usa "guardar" con una ID que ya está en la misma colección, se actualizará / sobrescribirá.
Si está buscando hacer una actualización verdadera, le sugiero que use "actualizar". La actualización no se sobrescribirá de la forma en que lo haría Guardar si está guardando utilizando la misma ID que ya está en la colección.
Por ejemplo, tiene dos campos "x" e "y" y desea mantener ambos pero cambiar el valor de "x". Si elige el comando "guardar" y no incluye y con el valor anterior o no tiene y en absoluto en su guardado, entonces ya no tendría el mismo valor o no estaría allí. Sin embargo, si elige actualizar usando $ set y solo tenía x incluida en su declaración de actualización, no afectaría a y.
db.collection.save()El método actualiza el documento si ya existe un documento con el mismo _id en la base de datos. Cuando ya existe un documento con el mismo _id en la base de datos, el método de guardar reemplaza completamente el documento con el nuevo documento. Del libro - Pro MongoDB Development
jack blank
1
En términos de ORACLE: mongo insert => Oracle insert mongo save => Oracle merge
Respuestas:
Guardar Vs Insertar:
En sus ejemplos dados, el comportamiento es esencialmente el mismo.
save
se comporta de manera diferente si se pasa con un parámetro "_id".Para guardar, si el documento contiene
_id
, se mantendrá al consultar la colección en el_id
campo, de lo contrario, se insertará.Guardar vs Actualizar :
update
modifica un documento existente que coincide con sus parámetros de consulta. Si no existe dicho documento coincidente, es cuandoupsert
aparece la imagen.upsert : false
: No pasa nada cuando no existe dicho documentoupsert : true
: Se crea un nuevo documento con contenidos iguales a los parámetros de consulta y parámetros de actualizaciónsave
: No permite ningún parámetro de consulta. si_id
existe y hay un documento coincidente con el mismo_id
, lo reemplaza. Cuando no se especifica _id / ningún documento coincidente, inserta el documento como uno nuevo.fuente
Consideremos los dos casos aquí para ahorrar: -
1) Tener _id en doc.
2) No tener _id en doc.
Consideremos los dos casos aquí para insertar: -
1) Tener _id de doc en la colección.
2) No tener _id de doc en la colección.
fuente
save
insertar o actualizar un documento.insert
solo hace una inserción.Pero en su caso, hará lo mismo, ya que el documento proporcionado en guardar no tiene
_id
campo.fuente
Dando un ejemplo
Salvar una manzana
Guarde una manzana con _id de la manzana guardada anteriormente
Ahora la manzana que guardamos tiene un color actualizado de rojo a rojo real
Ahorre una manzana con _id
Apple se insertó ya que no hay una manzana con el mismo Id. De objeto para hacer una actualización
Insertar una naranja
Naranja se inserta
Por lo tanto, guardar actuará como una actualización si se suministra con una identificación de objeto, siempre que la identificación del objeto ya exista de otra manera, hace una inserción.
fuente
Si intenta utilizar "insertar" con una ID que se utilizó anteriormente en la misma colección, obtendrá un error de clave duplicada. Si usa "guardar" con una ID que ya está en la misma colección, se actualizará / sobrescribirá.
Si está buscando hacer una actualización verdadera, le sugiero que use "actualizar". La actualización no se sobrescribirá de la forma en que lo haría Guardar si está guardando utilizando la misma ID que ya está en la colección.
Por ejemplo, tiene dos campos "x" e "y" y desea mantener ambos pero cambiar el valor de "x". Si elige el comando "guardar" y no incluye y con el valor anterior o no tiene y en absoluto en su guardado, entonces ya no tendría el mismo valor o no estaría allí. Sin embargo, si elige actualizar usando $ set y solo tenía x incluida en su declaración de actualización, no afectaría a y.
fuente
Como puede ver aquí, el método de guardado esencialmente hará una actualización (se actualiza si encuentra el documento, inserte lo contrario):
http://docs.mongodb.org/manual/reference/method/db.collection.save/#db.collection.save
Insertar es solo eso, una inserción recta.
fuente
Considere el siguiente documento
si db ya contiene el documento con _id: 1, entonces
la operación de guardar arrojará la excepción como a continuación
y donde como operación de inserción, simplemente anulará el documento.
fuente
db.collection.save()
El método actualiza el documento si ya existe un documento con el mismo _id en la base de datos. Cuando ya existe un documento con el mismo _id en la base de datos, el método de guardar reemplaza completamente el documento con el nuevo documento. Del libro - Pro MongoDB DevelopmentEn términos de ORACLE: mongo insert => Oracle insert mongo save => Oracle merge
fuente
db.<collection_name>.save(<Document>)
es equivalente a InsertOrUpdate Query.Mientras,
db.<collection_name>.insert(<Document>)
es equivalente a solo Insertar consulta.fuente