tutorial tipos operaciones modificar español documento datos consultas complejas como comandos actualizar mongodb

mongodb - tipos - ¿Cómo describo una colección en Mongo?



mongodb tutorial español (11)

Así que este es el Día 3 de aprender Mongo Db. Vengo del universo MySql ...

Muchas veces cuando necesito escribir una consulta para una tabla MySql con la que no estoy familiarizado, utilizo el comando "desc", básicamente diciéndome qué campos debo incluir en mi consulta.

¿Cómo podría hacer eso para un Mongo db? Lo sé, lo sé ... Estoy buscando un esquema en una base de datos sin esquema. =) Pero, ¿de qué otro modo sabrían los usuarios qué campos usar en sus consultas?

¿Voy por esto de la manera incorrecta? Obviamente estoy tratando de usar una forma de MySql de hacer las cosas en un Mongo db. ¿Cuál es la forma de Mongo?


AFAIK, no hay una manera y es lógico que sea así.

MongoDB sin esquemas permite que una sola colección tenga documentos con diferentes campos. Entonces, realmente no puede haber una descripción de una colección, como la descripción de una tabla en las bases de datos relacionales.

Si bien este es el caso, la mayoría de las aplicaciones mantienen un esquema para sus colecciones y, como dijo Chris, su aplicación aplica esto.

Como tal, no tendría que preocuparse de buscar primero las claves disponibles para realizar una consulta. Puede pedirle a MongoDB cualquier conjunto de claves (es decir, la parte de proyección de la consulta) o consultar sobre cualquier conjunto de claves. En ambos casos, si las claves especificadas existen en un documento, se utilizan, de lo contrario, no lo son. No obtendrás ningún error.

Por ejemplo (En el shell de mongo):

Si se trata de un documento de muestra en su colección de people y todos los documentos siguen el mismo esquema:

{ name : "My Name" place : "My Place" city : "My City" }

Las siguientes son consultas perfectamente válidas:

Estos dos devolverán el documento anterior:

db.people.find({name : "My Name"}) db.people.find({name : "My Name"}, {name : 1, place :1})

Esto no devolverá nada, pero tampoco generará un error:

db.people.find({first_name : "My Name"})

Esto coincidirá con el documento anterior, pero solo tendrá la propiedad predeterminada "_id" en el documento devuelto.

db.people.find({name : "My Name"}, {first_name : 1, location :1})



Escriba la consulta siguiente en editor / mongoshell

var col_list= db.emp.findOne(); for (var col in col_list) { print (col) ; }

salida le dará el nombre de las columnas en la colección:

_id name salary


Este es mi día 30 o algo así como jugar con MongoDB. Desafortunadamente, hemos cambiado a MySQL después de trabajar con MongoDB debido a los problemas de infraestructura actuales de mi empresa. Pero después de haber implementado el mismo modelo tanto en MongoDB como en MySQL, puedo ver claramente la diferencia ahora.

Por supuesto, hay un esquema involucrado cuando se trata de bases de datos sin esquema como MongoDB, pero el esquema lo dicta la aplicación, no la base de datos. La base de datos empujará en lo que se le dé. Siempre que sepa que los administradores no inician sesión secretamente en Mongo y realizan cambios, y que todos los accesos a la base de datos son controladores a través de un wrapper , el único lugar que debe mirar para el esquema son sus clases modelo. Por ejemplo, en nuestra aplicación Rails, estos son dos de los modelos que tenemos en Mongo,

class Consumer include MongoMapper::Document key :name, String key :phone_number, String one :address end class Address include MongoMapper::EmbeddedDocument key :street, String key :city, String key :state, String key :zip, String key :state, String key :country, String end

Ahora, después de cambiar a MySQL, nuestras clases se ven así,

class Consumer < ActiveRecord::Base has_one :address end class Address < ActiveRecord::Base belongs_to :consumer end

No te dejes engañar por la brevedad de las clases. En la última versión con MySQL, los campos se extraen de la base de datos directamente. En el primer ejemplo, los campos están justo frente a nuestros ojos.

Con MongoDB, si teníamos que cambiar un modelo en particular, simplemente agregamos, eliminamos o modificamos los campos de la clase y funciona de inmediato. No tenemos que preocuparnos por mantener las tablas / columnas de la base de datos sincronizadas con la estructura de clases. Entonces, si está buscando el esquema en MongoDB, mire hacia su aplicación en busca de respuestas y no a la base de datos.

Esencialmente estoy diciendo exactamente lo mismo que @Chris Shain :)


No hay una buena respuesta aquí. Como no hay esquema, no puede ''describir'' la colección. En muchas (¿la mayoría?) Aplicaciones MongoDb, sin embargo, el esquema está definido por la estructura de la jerarquía de objetos utilizada en la aplicación de escritura (java o c # o lo que sea), por lo que puede reflexionar sobre la biblioteca de objetos para obtener esa información . De lo contrario, hay un poco de prueba y error.


Puedes usar una herramienta UI mongo brújula para mongoDb. Muestra todos los campos de esa colección y también muestra la variación de los datos en ella.


Si bien son correctos, todos lo están haciendo demasiado complejo. Creo que OP solo quiere saber cómo son sus datos. Si ese es el caso, puedes simplemente

db.collectionName.findOne()

Esto mostrará un documento (también conocido como registro) en la base de datos en un formato bonito.


Si está bien con la ejecución de un Mapa / Reducir, puede reunir todos los campos de documentos posibles.

Comience con esta publicación .

El único problema aquí es que está ejecutando un Mapa / Reducir que puede requerir muchos recursos. En cambio, como otros han sugerido, querrá ver el código que escribe los datos reales.

El hecho de que la base de datos no tenga un esquema no significa que no haya un esquema. En términos generales, la información del esquema estará en el código.


Si está utilizando NodeJS y quiere obtener todos los nombres de campo usando la solicitud API, este código funciona para mí:

let arrayResult = []; db.findOne().exec(function (err, docs)){ if(err) //show error const JSONobj = JSON.parse(JSON.stringify(docs)); for(let key in JSONobj) { arrayResult.push(key); } return callback(null, arrayResult); }

El arrayResult le dará nombres completos de campo / columna

Salida-

[ "_id", "emp_id", "emp_type", "emp_status", "emp_payment" ]

¡Espero que esto funcione para usted!


Yo también tenía esta necesidad, Cavachon. Así que creé una herramienta de código abierto llamada Variety que hace exactamente esto: link

Espero que lo encuentres útil. Avíseme si tiene alguna pregunta o algún problema al usarla.

¡Buena suerte!


print(''/n--->'', Object.getOwnPropertyNames(db.users.findOne()) .toString() .replace(/,/g, ''/n---> '') + ''/n'');

---> _id ---> firstName ---> lastName ---> email ---> password ---> terms ---> confirmed ---> userAgent ---> createdAt