MongoDB
Operación CRUD
Buscar..
Sintaxis
- Insertar ( documento o matriz de documentos )
- insertOne ('document', {writeConcern: 'document'})
- insertMany ({[documento 1, documento 2, ...]}, {writeConcern: documento, ordenado: booleano})
- encontrar ( consulta , proyección )
- findOne ( consulta , proyección )
- actualizar ( consultar , actualizar )
- updateOne ( consulta , actualización , {upsert: boolean, writeConcern: document})
- updateMany ( consulta , actualización , {upsert: boolean, writeConcern: document})
- replaceOne ( consulta , reemplazo , {upsert: boolean, writeConcern: document})
- eliminar ( consulta , justOne )
- findAndModify ( consultar , ordenar , actualizar , opciones [opcional] )
Observaciones
La actualización y eliminación de un documento debe hacerse con cuidado. Dado que la operación puede afectar para varios documentos.
Crear
db.people.insert({name: 'Tom', age: 28});
O
db.people.save({name: 'Tom', age: 28});
La diferencia con save
es que si el documento aprobado contiene un campo _id
, si ya existe un documento con ese _id
, se actualizará en lugar de agregarse como nuevo.
Dos nuevos métodos para insertar documentos en una colección, en MongoDB 3.2.x:
Utilice insertOne
para insertar un solo registro: -
db.people.insertOne({name: 'Tom', age: 28});
Use insertMany
para insertar múltiples registros: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Tenga en cuenta que la insert
se resalta como obsoleta en todos los controladores de idioma oficiales desde la versión 3.0. La distinción completa es que los métodos de shell en realidad se quedaron atrás de los otros controladores en la implementación del método. Lo mismo se aplica para todos los otros métodos de CRUD
Actualizar
Actualizar todo el objeto:
db.people.update({name: 'Tom'}, {age: 29, name: 'Tom'})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace only first matching document.
db.people.updateMany({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace all matching documents.
O simplemente actualizar un solo campo de un documento. En este caso la age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
También puede actualizar varios documentos simultáneamente agregando un tercer parámetro. Esta consulta actualizará todos los documentos donde el nombre sea igual a Tom
:
db.people.update({name: 'Tom'}, {$set: {age: 29}}, {multi: true})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{$set:{age: 30}) //Will update only first matching document.
db.people.updateMany({name: 'Tom'},{$set:{age: 30}}) //Will update all matching documents.
Si se va a actualizar un nuevo campo, ese campo se agregará al documento.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Si se necesita reemplazar un documento,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
puede ser usado.
Nota : Los campos que utiliza para identificar el objeto se guardarán en el documento actualizado. Los campos que no estén definidos en la sección de actualización se eliminarán del documento.
Borrar
Borra todos los documentos que coinciden con el parámetro de consulta:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
O solo uno
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
El método remove()
MongoDB. Si ejecuta este comando sin ningún argumento o sin un argumento vacío, eliminará todos los documentos de la colección.
db.people.remove();
o
db.people.remove({});
Leer
Consulte todos los documentos en la colección de people
que tienen un campo de name
con un valor de 'Tom'
:
db.people.find({name: 'Tom'})
O solo el primero:
db.people.findOne({name: 'Tom'})
También puede especificar qué campos devolver al pasar un parámetro de selección de campo. Lo siguiente excluirá el campo _id
y solo incluirá el campo de age
:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Nota: de forma predeterminada, se _id
campo _id
, incluso si no lo solicita. Si desea no obtener el _id
vuelta, sólo puede seguir el ejemplo anterior y pedir la _id
ser excluido especificando _id: 0
(o _id: false
) Si usted quiere encontrar el registro secundario como objeto de dirección contiene país , ciudad, etc.
db.people.find({'address.country': 'US'})
& especifique el campo también si es necesario
db.people.find({'address.country': 'US'}, {'name': true, 'address.city': true})Remember that the result has a `.pretty()` method that pretty-prints resulting JSON:
db.people.find().pretty()
Más operadores de actualización
Puede utilizar otros operadores además de $set
al actualizar un documento. El operador $push
permite insertar un valor en una matriz, en este caso agregaremos un nuevo apodo a la matriz de nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
El operador $pull
es lo opuesto a $push
, puede extraer elementos específicos de las matrices.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
El operador $pop
permite eliminar el primer o el último valor de una matriz. Digamos que el documento de Tom tiene una propiedad llamada hermanos que tiene el valor ['Marie', 'Bob', 'Kevin', 'Alex']
.
db.people.update({name: 'Tom'}, {$pop: {siblings: -1}})
// This will remove the first value from the siblings array, which is 'Marie' in this case.
db.people.update({name: 'Tom'}, {$pop: {siblings: 1}})
// This will remove the last value from the siblings array, which is 'Alex' in this case.
Parámetro "multi" al actualizar varios documentos
Para actualizar varios documentos en una colección, establezca la opción múltiple en verdadero.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi es opcional. Si se establece en verdadero, actualiza varios documentos que cumplen con los criterios de consulta. Si se establece en falso, actualiza un documento. El valor predeterminado es falso.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "MongoDB Overview"} {"_id": ObjectId (59835487adf45ec6), "title": "NoSQL Overview"} {"_id": Id. De objeto (59835487adf45ec7), "título": "Descripción general de los puntos de tutoría"}
db.mycol.update ({'title': 'MongoDB Overview'}, {$ set: {'title': 'New MongoDB Tutorial'}}, {multi: true})
Actualización de documentos incrustados.
Para el siguiente esquema:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Actualice las marcas de Tom a 55 donde las marcas son 50 (use el operador posicional $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Para el siguiente esquema:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Actualiza las marcas de inglés de Tom a 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Explicando el ejemplo anterior:
Al usar {name: "Tom", "marks.subject": "English"} obtendrá la posición del objeto en la matriz de marcas, donde el asunto es inglés. En "marcas. $. Marcas", $ se usa para actualizar en esa posición de la matriz de marcas
Actualizar valores en una matriz
El operador $ posicional identifica un elemento en una matriz para actualizar sin especificar explícitamente la posición del elemento en la matriz.
Considere una colección de estudiantes con los siguientes documentos:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Para actualizar 80 a 82 en la matriz de calificaciones en el primer documento, use el operador posicional $ si no conoce la posición del elemento en la matriz:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)