consultas comandos avanzadas mongodb projection

comandos - ¿Cómo seleccionar un solo campo para todos los documentos en una colección MongoDB?



consultas avanzadas mongodb (18)

obtener el nombre del alumno

student-details = db.students.find({{ "roll": {$gt: 70} },{"name": 1, "_id": False})

obtener nombre y rol del estudiante

student-details = db.students.find({{ "roll": {$gt: 70}},{"name": 1,"roll":1,"_id": False})

En mi MongoDB, tengo una colección de estudiantes con 10 registros que tienen los campos name y roll . Un registro de esta colección es:

{ "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"), "name" : "Swati", "roll" : "80", }

Quiero recuperar el roll campo solo para los 10 registros de la colección como lo haríamos en la base de datos tradicional usando:

SELECT roll FROM student

Revisé muchos blogs, pero todos dan como resultado una consulta que debe tener la cláusula WHERE , por ejemplo:

db.students.find({ "roll": { $gt: 70 })

La consulta es equivalente a:

SELECT * FROM student WHERE roll > 70

Mi requisito es encontrar una sola clave solo sin ninguna condición. Entonces, ¿cuál es la operación de consulta para eso?


Aquí tienes, 3 formas de hacerlo, la más corta a la aburrida:

db.student.find({}, ''roll _id''); // <--- Just multiple fields name space separated // OR db.student.find({}).select(''roll _id''); // <--- Just multiple fields name space separated // OR db.student.find({}, {''roll'' : 1 , ''_id'' : 1 ); // <---- Old lengthy boring way

Para eliminar el uso de campo específico - operador:

db.student.find({}).select(''roll -_id'') // <--- Will remove id from result


Creo que mattingly890 tiene la respuesta correcta, aquí hay otro ejemplo junto con el patrón / comando

db.collection.find( {}, {your_key:1, _id:0})


De los documentos de MongoDB :

Una proyección puede incluir explícitamente varios campos. En la siguiente operación, el método find () devuelve todos los documentos que coinciden con la consulta. En el conjunto de resultados, solo los campos item y qty y, por defecto, el campo _id regresan en los documentos coincidentes.

db.inventory.find ({type: ''food''}, {item: 1, qty: 1})

En este ejemplo de la gente de Mongo, los documentos devueltos contendrán solo los campos de item , qty y _id .

Por lo tanto, debería poder emitir una declaración como:

db.student.find({}, {roll:1, _id:0})

La declaración anterior seleccionará todos los documentos en la colección de estudiantes, y el documento devuelto devolverá solo el campo de lista (y excluirá el _id ).

Si no mencionamos _id:0 los campos devueltos serán roll y _id . El campo ''_id'' siempre se muestra por defecto. Por lo tanto, debemos mencionar explícitamente _id:0 junto con roll .


En mongodb 3.4 podemos usar la siguiente lógica, no estoy seguro acerca de las versiones anteriores

seleccione roll from student ==> db.student.find (! {}, {roll: 1})

La lógica anterior ayuda a definir algunas columnas (si son menos)


Esto funciona para mi

db.student.find({},{"roll":1})

sin condición en la cláusula where, es decir, dentro de las primeras llaves. dentro de las próximas llaves: la lista de nombres de campos de proyección que se necesitarán en el resultado y 1 indica que un campo en particular es la parte del resultado de la consulta


La consulta para las tarifas de MongoDB aquí es la recopilación y la descripción es un campo.

db.getCollection(''fees'').find({},{description:1,_id:0})


Pruebe la siguiente consulta:

db.student.find({}, {roll: 1, _id: 0}).pretty();

¡¡Espero que esto ayude!!


Si bien la respuesta de gowtham está completa, vale la pena señalar que esos comandos pueden diferir de una API a otra (para aquellos que no usan el shell de mongo).
Consulte el enlace de documentación para obtener información detallada.

Los nodej , por ejemplo, tienen un método llamado `proyección que agregaría a su función de búsqueda para proyectar.

Siguiendo el mismo conjunto de ejemplos, se pueden usar comandos como los siguientes con Node:

db.student.find({}).project({roll:1})

SELECCIONE _id, pase de estudiante

O
db.student.find({}).project({roll:1, _id: 0})

SELECCIONAR rollo de estudiante

y así.

Nuevamente para los usuarios de nodejs, no olviden (con lo que ya deberían estar familiarizados si usó esta API antes) usar toArray para agregar su comando .then .


Si desea recuperar el campo "roll" solo para los 10 registros en las colecciones. Entonces prueba esto.

En MongoDb:

db.students.find ({}, {"roll": {"$ roll"})

En SQL:

seleccione rollo de estudiantes


Solo con fines educativos, también puede hacerlo con cualquiera de las siguientes formas:

1)

var query = {"roll": {$gt: 70}; var cursor = db.student.find(query); cursor.project({"roll":1, "_id":0});

2)

var query = {"roll": {$gt: 70}; var projection = {"roll":1, "_id":0}; var cursor = db.student.find(query,projection);

``


Solo quiero agregar a las respuestas que si desea mostrar un campo anidado en otro objeto, puede usar la siguiente sintaxis

db.collection.find( {}, {{''object.key'': true}})

Aquí la clave está presente dentro del objeto llamado objeto

{ "_id" : ObjectId("5d2ef0702385"), "object" : { "key" : "value" } }


Usando Studio 3T para MongoDB, si uso .find({}, { _id: 0, roll: true }) aún devuelve una matriz de objetos con una propiedad _id vacía.

Usar el map JavaScript me ayudó a recuperar solo la propiedad de roll deseada como una matriz de cadenas:

var rolls = db.student .find({ roll: { $gt: 70 } }) // query where role > 70 .map(x => x.roll); // return an array of role


Use la consulta como esta en el shell:

1. Utilice database_name

e.g: use database_name

2. Que solo devuelve información de campo particular de los activos cuando coincide, _id:0 especifica que no se muestre ID en el resultado

db.collection_name.find( { "Search_Field": "value" }, { "Field_to_display": 1,_id:0 } )


Para una mejor comprensión, he escrito una consulta MySQL similar.

Selecting specific fields

MongoDB: db.collection_name.find ({}, {nombre: verdadero, correo electrónico: verdadero, teléfono: verdadero});

MySQL: SELECCIONE nombre, correo electrónico, teléfono DESDE nombre_tabla;

Selecting specific fields with where clause

MongoDB: db.collection_name.find ({email:''[email protected] ''}, {name: true, email: true, phone: true});

MySQL: SELECCIONE nombre, correo electrónico, teléfono DESDE table_name WHERE email = ''[email protected]'';


obtener todos los datos de la tabla

db.student.find({})

SELECCIONAR * DE estudiante

obtener todos los datos de la tabla sin _id

db.student.find({}, {_id:0})

SELECCIONE nombre, pase de estudiante

obtener todos los datos de un campo con _id

db.student.find({}, {roll:1})

SELECCIONE ID, pase de estudiante

obtener todos los datos de un campo sin _id

db.student.find({}, {roll:1, _id:0})

SELECCIONAR rollo de estudiante

buscar datos especificados utilizando la cláusula where

db.student.find({roll: 80})

SELECCIONE * DE los estudiantes DONDE roll = ''80''

buscar datos usando la cláusula where y mayor que la condición

db.student.find({ "roll": { $gt: 70 }}) // $gt is greater than

SELECCIONE * DEL alumno DONDE ruede> ''70''

buscar datos utilizando la cláusula where y una condición mayor o igual que

db.student.find({ "roll": { $gte: 70 }}) // $gte is greater than or equal

SELECCIONE * DEL alumno DONDE ruede> = ''70''

buscar datos utilizando la cláusula where y una condición menor o igual que

db.student.find({ "roll": { $lte: 70 }}) // $lte is less than or equal

SELECCIONE * DEL alumno DONDE ruede <= ''70''

encontrar datos utilizando la cláusula where y menos que condicionar

db.student.find({ "roll": { $lt: 70 }}) // $lt is less than

SELECCIONE * DEL alumno DONDE ruede <''70''


db.<collection>.find({}, {field1: <value>, field2: <value> ...})

En su ejemplo, puede hacer algo como:

db.students.find({}, {"roll":true, "_id":false})

Proyección

El parámetro de proyección determina qué campos se devuelven en los documentos coincidentes. El parámetro de proyección toma un documento de la siguiente forma:

{ field1: <value>, field2: <value> ... }

The <value> can be any of the following:

  1. 1 o verdadero para incluir el campo en los documentos de devolución.

  2. 0 o falso para excluir el campo.

NOTA

Para el campo _id, no tiene que especificar explícitamente _id: 1 para devolver el campo _id. El método find () siempre devuelve el campo _id a menos que especifique _id: 0 para suprimir el campo.

LEE MAS


db.student.find({}, {"roll":1, "_id":0})

Esto es equivalente a -

Seleccionar rollo de estudiante



db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})

Esto es equivalente a -

Seleccionar rollo, nombre del alumno