En mi MongoDB, tengo una colección de estudiantes con 10 registros que tienen campos name
y roll
. Un registro de esta colección es:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Quiero recuperar el campo roll
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 una WHERE
cláusula, 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?
mongodb
projection
Shipra Swati
fuente
fuente
Respuestas:
De los documentos de MongoDB :
En este ejemplo de la gente en Mongo, los documentos devueltos contendrán sólo los campos de
item
,qty
y_id
.Por lo tanto, debe poder emitir una declaración como:
La declaración anterior seleccionará todos los documentos en la colección de estudiantes, y el documento devuelto devolverá solo el
roll
campo (y excluirá el_id
).Si no mencionamos
_id:0
los campos devueltos seránroll
y_id
. El campo '_id' siempre se muestra de forma predeterminada. Por lo tanto, debemos mencionar explícitamente_id:0
junto conroll
.fuente
0
para 9 de ellos. Editar: No importa, excluyendo,_id
es decir,{field_I_want:1, _id:0}
parece funcionarWith the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.
Esto podría ser interesante para algunos de ustedes. ( fuente )obtener todos los datos de la tabla
obtener todos los datos de la tabla sin _id
obtener todos los datos de un campo con _id
obtener todos los datos de un campo sin _id
buscar datos especificados utilizando la cláusula where
buscar datos usando la cláusula where y mayor que la condición
buscar datos utilizando la cláusula where y una condición mayor o igual que
buscar datos utilizando la cláusula where y una condición menor o igual que
buscar datos utilizando la cláusula where y menos que condicionar
fuente
db.student.find({}, {_id:0})
Gracias por la ayuda.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})
fuente
Aquí tienes, 3 formas de hacerlo, la más corta a la aburrida:
Para eliminar el campo específico, utilice el
-
operador:fuente
Solo con fines educativos, también puede hacerlo con cualquiera de las siguientes formas:
1)
2)
``
fuente
Pruebe la siguiente consulta:
¡¡Espero que esto ayude!!
fuente
En su ejemplo, puede hacer algo como:
Proyección
NOTA
LEE MAS
fuente
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 nodejs , 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})
O
db.student.find({}).project({roll:1, _id: 0})
y así.
Una vez más, para los usuarios de nodejs, no olviden (con lo que ya deberían estar familiarizados si antes usaban esta API)
toArray
para agregar su.then
comando.fuente
Para una mejor comprensión, he escrito una consulta MySQL similar.
fuente
Esto funciona para mi
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 particular es la parte del resultado de la consulta
fuente
fuente
La consulta para las tarifas de MongoDB aquí es la recopilación y la descripción es un campo.
fuente
Si desea recuperar el campo "roll" solo para los 10 registros en las colecciones. Entonces prueba esto.
En MongoDb:
En SQL:
fuente
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
fuente
Esto es equivalente a -
db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})
Esto es equivalente a -
fuente
Use la consulta como esta en el shell:
1. Uso
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 resultadofuente
En mongodb 3.4 podemos usar la lógica a continuación, 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)
fuente
Usando Studio 3T para MongoDB, si lo uso
.find({}, { _id: 0, roll: true })
aún devuelve una matriz de objetos con un vacío_id
propiedad .El uso de JavaScript
map
me ayudó a recuperar solo laroll
propiedad deseada como una matriz de cadenas:fuente
No estoy seguro de que esto responda la pregunta, pero creo que vale la pena mencionarlo aquí. Hay una forma más de seleccionar un solo campo (y no múltiples) usando
db.collection_name.distinct();
p.ej,
db.student.distinct('roll',{});
O, segunda forma: usar
db.collection_name.find().forEach();
(se pueden seleccionar varios campos aquí por concatenación)p.ej,
db.collection_name.find().forEach(function(c1){print(c1.roll);});
fuente