-------------------------------------------------------------
Curso CodigoFacilito MongoDB
-------------------------------------------------------------
cuando se ejecuta mongod ---> es el servidor
si se ejecuta mongo ---> es el cliente de la BD
--------Insert---------
+ Para guardar en variables se usa la palabra var (asi como en javascript)
+ Para insertar es [Link](variable)
+ Si queremos insertar un objeto en una coleccion que no existe con el
comando de insert se crea automaticamente la coleccion.
--------Find---------
+ Es como un select en bd relacional, y se hace con .find({campo:condicion,
campo1:condicion1})
+ '$ne' es el diferente o negado de una condicion en el find
+ [Link]({},{campo1:1, _id:0}) // En este find busca todos los
objetos de la coleccion ya que no esta filtrado y muestra solo el campo1 y no
muestra _id ya que por defecto muestra el id
--------Update--------
+ Para hacer actualizaciones de un campo de un objeto en la BD se puede hacer
con:
+ Capturando el objeto en una variable y se hace variable.
+ [Link]({}, {$addToSet: {campo : valor}}) // esto lo que hace
es agregar al campo el valo establecido y campo es un arreglo.
+ [Link]({}, {$push: {campo : valor}}) // esto lo que hace es
agregar al campo el valo establecido y campo es un arreglo.
+ La diferencia entre addToSet y push es que el primero no admite repetidos
en el arreglo y el segundo si.
+ [Link]({}, {$set: {campo : valor}}) // se cambio el campo por
el valor introducido.
+ [Link]({}, {$set: {campo : valor}}, {multi: true}) // con el
multi activado se hace el cambio para todos los objetos que concuerdan.
+ [Link]({}, {$unset: {campo : 1}}) // a todos los objetos que
concuerden se le elimina el atributo 'campo'.
+ [Link]({}, {$push/$addToSet: {campo : {$each: [valor1,
valor2]}}}) // esto lo que hace es agregar al atributo campo que es un arreglo los
valores valor1 y valor2.
+ Tambien se puede hacer push a una posicion especifica del arreglo con el
atributo $position [Link]({}, {$push: {campo : {$each: [valor1,
valor2], $position:4}}}) , con addToSet no funciona.
--------Operadores--------
+ $gt => mayor a
+ $gte => mayor o igual a
+ $lt => menor a
+ $lte => menor o igual a
--------Cursores------
+ Se pueden crear cursores y estos se pueden recorrer y que para cada objeto
se le haga alguna modificacion. Por ejm:
var cursor = [Link]()
[Link](function (d){ [Link] = 'valor'; [Link](d)})
Esta funcion lo que hace es para cada objeto de la coleccion
modificarle el campo por valor a todos por igual y se guarda.
--------Metodos de Cursores------
+ [Link]().sort({campo:1}) // Se ordena la coleccion por el campo
de menor a mayor, con -1 se ordena de mayor a menor.
+ [Link]().skip(1) // el skip salta tantos objetos como se le
indique
+ [Link]().count() // nos enumera la cantidad de documentos del
find
+ [Link]().limit(1) // el limit nos devuelve tantos documentos
como se le indique
--------Groups------
+ [Link]([ {$group: {_id: "$campo", "repetidos": {$sum:
1}} ]) // Con esto se agrupan los objetos de la coleccion por el atributo campo. Y
se crea un campo repetido que es el contador de todos los objetos de la coleccion
que comparten el $campo igual.
+ [Link]([ {$group: {_id: "$campo", "suma": {$sum:
"$campo2"}} ]) // Con esto "suma" va a sumar los valores del atributo campo2 cuando
comparten el atributo campo.
+ $avg, esto nos da el promedio de cierto campo.
--------Expresiones Regulares------
+ [Link]({campo: /@/ }) // Busca el el atributo campo que
contenga @
+ [Link]({campo: /.com$/ }) // Busca el el atributo campo que
contenga .com al final por eso es el $.
+ [Link]({campo: /^abc/ }) // Busca el el atributo campo que
contenga abc al principio por eso es el ^.
--------Documento Embebido------
+ Para hacer find buscando en un atributo que es un arreglo o un diccionario
se busca con [Link]({campo1.campo1_1: valor})
+ Con $elemMatch filtra sobre atributos que esten dentro de otro atributo de
los objetos de la coleccion. [Link]({campo1 : {$elemMatch : {campo1_1:
valor}}})
--------Update SubDocumentos------
+ Con campo.$, se manejan subdocumentos dentro del atributo campo.
+ [Link]({"campo1.campo1_1": valor}, {$set:
{"campo1.$.campo1_3": valor2}}), // Con el $ se itera sobre el arreglo del atributo
campo1