Insertar documentos en MongoDB

Insertar documentos en MongoDBEste es el primer artículo sobre las operaciones CRUD en MongoDB (Create, Read, Update, Delete), que en este caso se corresponden con Insert, Find, Update y Remove. Esto es, básicamente, las operaciones de inserción, búsqueda, actualización y borrado de documentos con formato JSON en la base de datos (internamente se almacenan como BSON). En este tutorial se va a ver como insertar documentos en MongoDB desde la shell.

Antes de continuar y, si sois nuevos en el uso de MongoDB, os recomiendo leer los artículos anteriores del tutorial de MongoDB con Java dónde podréis ver instalación y puesta en marcha

Los documentos se deben insertar en una determinada colección dentro de la base de datos. Recordad en este punto que se puede seleccionar la base de datos con el comando “use”  seguido del nombre de la base de datos que se desea usar (use db_name).

Para poder ver el resultado de la operación realizada, después de cada  operación se mostrará el contenido de la colección mediante el método “find” o “findOne” para buscar todos los documentos o uno a azar respectivamente.

Se presupone que ya tenéis un servidor de MongoDB instalado y arrancado. El primer paso será conectase como cliente contra la base de datos:

$ mongo
MongoDB shell version: 2.2.3
connecting to: test
>

Método “insert”

Para insertar documentos en MongoDB se debe usar el método “insert” invocado desde la colección dónde se desea añadir el documento:

> db.people.insert({ name: "Jose David", age: 28 })
> db.people.find()
{ "_id" : ObjectId("513c796ccd61c58d37e32704"), "name" : "Jose David", "age" : 28 }

Otra forma de hacerlo, aprovechando que la shell de MongoDB es un intérprete de JavaScript (esto significa que podemos usar la  sintaxis de JavaScript y ejecutar  código), es crear una variable documento en formato JSON e insertar dicho documento.

> doc = { name: "Peter", age: 30 }
{ "name" : "Peter", "age" : 30 }
> db.people.insert(doc)
> db.people.find()
{ "_id" : ObjectId("513c796ccd61c58d37e32704"), "name" : "Jose David", "age" : 28 }
{ "_id" : ObjectId("513c79eacd61c58d37e32705"), "name" : "Peter", "age" : 30 }

Método “save”

El método “save” es algo más particular ya que, si existe el documento te lo actualiza y, sino existe, lo añade como si de un nuevo documento se tratase (insert). Para ello, se basa en el identificador del documento (_id).

Primero, se va a guardar un documento que no existe:

> db.people.save({ _id: "Sara", name: "Sara", age: 28 })
> db.people.find()
{ "_id" : "Sara", "name" : "Sara", "age" : 28 }

Y ahora, se va a guardar el mismo documento (mismo “_id”) pero con el campo “age” modificado:

> db.people.save({ _id: "Sara", name: "Sara", age: 25 })
> db.people.find()
{ "_id" : "Sara", "name" : "Sara", "age" : 25 }

Como se puede apreciar, en este caso no se ha añadido un nuevo documento sino que se ha actualizado el ya existente con los nuevos datos especificados.

Si se intenta realizar estas mismas operaciones con el método “insert”, la segunda vez daría un error de clave duplicada:

> db.people.insert({ _id: "Sara", name: "Sara", age: 25 })
E11000 duplicate key error index: test.people.$_id_  dup key: { : "Sara" }

Identificador de documento BSON

Es importante mencionar en este punto que el identificador del documento “_id” es inmutable, es decir, MongoDB no permite la actualización de dicho campo. Como se puede ver en el primer código de ejemplo, si no se especifica un identificador de forma explicita en el documento, automáticamente, MongoDB añade uno basándose en una variable global interna del servidor.

Arrays y documentos internos

Los campos clave de un documento pueden contener arrays e incluso otros documentos además de los tipos básicos más comunes como cadenas de caracteres, números enteros, números decimales, etc…

Para insertar un documento con algunos campos clave que contengan arrays simplemente se especifica la clave y, en el lugar del valor, la serie de elementos encerrados entre []:

> db.people.insert({ name: "Sara", age: 25, colors: ["blue", "gree", "red"], hobbies: ["listen music", "running"] })
> db.people.findOne()
{
    "_id" : ObjectId("513c7d88cd61c58d37e32708"),
    "name" : "Sara",
    "age" : 25,
    "colors" : [
        "blue",
        "gree",
        "red"
    ],
    "hobbies" : [
        "listen music",
        "running"
    ]
}

Y para insertar un documento interno, se hace del mismo modo pero con un formato de documento JSON válido. Simplemente tened en cuenta que es un documento dentro de otro y podrían existir varios niveles de anidación:

> db.people.insert({ name: "Jose David", age: 25, address: { street: "Elm Street", number: 23, city: "Córdoba"} })
> db.people.findOne()
{
    "_id" : ObjectId("513c7ff5cd61c58d37e3270a"),
    "name" : "Jose David",
    "age" : 25,
    "address" : {
        "street" : "Elm Street",
        "number" : 23,
        "city" : "Córdoba"
    }
}

Conclusión

Como se puede ver, esta primera operación CRUD de MongoDB desde la shell no resulta especialmente complicada. Insertar documentos en MongoDB es una tarea básica en el día a día de quien trabajo con cualquier tipo de base de datos y, en este caso, el único extra que se debe dominar con bastante soltura es el formato JSON.

Espero que no les haya resultado complicado y, como siempre, para cualquier duda o sugerencia dejen un comentario.

Happy Minds!!!

Share on FacebookTweet about this on TwitterShare on LinkedInShare on RedditShare on Google+Digg thisShare on TumblrPin on PinterestBuffer this pagePrint this pageEmail this to someone