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 o verdadero para incluir el campo en los documentos de devolución.
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.
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