Consulta de documentos de MongoDB
La consulta de documentos en MongoDB utiliza elfind()、findOne()método.
El método find() muestra todos los documentos de forma no estructurada.
Sintaxis
El formato de sintaxis para consultar datos en MongoDB es el siguiente:
db.collection.find(query, projection)
- query: Condición de consulta para buscar documentos. Por defecto es
{}, es decir, coincide con todos los documentos. - projection(Opcional): Especifica los campos a incluir o excluir en los resultados devueltos.
Buscar todos los documentos:
Ejemplo
Buscar documentos según la condición:
Ejemplo
Buscar documentos según la condición y devolver solo los campos especificados:
Ejemplo
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
);
Si necesita leer los datos de manera legible, puede usar el método pretty(). El formato de sintaxis es el siguiente:
>db.col.find().pretty()
El método pretty() muestra todos los documentos de forma formateada.
Ejemplo
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "Tutorial de MongoDB",
"description" : "MongoDB es una base de datos NoSQL",
"by" : "Tutorial de Ejemplo",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
2、findOne()
El método findOne() se utiliza para buscar un solo documento en una colección. Si encuentra varios documentos coincidentes, solo devuelve el primero.
Sintaxis:
db.collection.findOne(query, projection)
- query: Condición de consulta para buscar documentos. Por defecto es
{}, es decir, coincide con todos los documentos. - projection(Opcional): Especifica los campos a incluir o excluir en los resultados devueltos.
Buscar un solo documento:
db.myCollection.findOne({ name: "Alice" });Buscar un solo documento y devolver solo los campos especificados:
db.myCollection.findOne(
{ name: "Alice" },
{ name: 1, age: 1, _id: 0 }
);
Métodos de consulta avanzados
1. Uso de operadores de comparación
MongoDB admite varios operadores de comparación, como$gt、$lt、$gte、$lte、$eq、$ne, etc.
Buscar documentos con edad mayor que 25:
db.myCollection.find({ age: { $gt: 25 } });
2. Uso de operadores lógicos
MongoDB admite varios operadores lógicos, como$and、$or、$not、$nor, etc.
Buscar documentos con edad mayor que 25 y ciudad "New York":
Ejemplo
$and: [
{ age: { $gt: 25 } },
{ city: "New York" }
]
});
3. Uso de expresiones regulares
Se pueden usar expresiones regulares para consultas de coincidencia de patrones.
Buscar documentos cuyo nombre comience con "A":
db.myCollection.find({ name: /^A/ });
4. Proyección
La proyección se utiliza para controlar los campos devueltos en los resultados de la consulta. Se puede usar de dos maneras: incluyendo o excluyendo campos.
Devolver solo los campos de nombre y edad:
Ejemplo
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
);
5. Ordenamiento
Se pueden ordenar los resultados de la consulta.
Ordenar por edad en orden descendente:
db.myCollection.find().sort({ age: -1 });
6. Limitación y salto
Se puede limitar y saltar una cantidad específica de documentos en los resultados de la consulta.
Devolver los primeros 10 documentos:
db.myCollection.find().limit(10);
Saltar los primeros 5 documentos y devolver los siguientes 10 documentos:
db.myCollection.find().skip(5).limit(10);
Ejemplo
Buscar documentos con edad mayor que 25 y ciudad "New York", devolver solo los campos de nombre y edad, ordenar por edad en orden descendente y devolver los primeros 10 documentos.
Ejemplo
{
$and: [
{ age: { $gt: 25 } },
{ city: "New York" }
]
},
{ name: 1, age: 1, _id: 0 }
).sort({ age: -1 }).limit(10);
Comparación entre MongoDB y la cláusula WHERE de RDBMS
Si está familiarizado con los datos SQL convencionales, la siguiente tabla puede ayudarle a comprender mejor las consultas condicionales de MongoDB:
| Operación | Formato | Ejemplo | Sentencia similar en RDBMS |
|---|---|---|---|
| Igual a | {<key>:<value>} |
db.col.find({"by":"Ejemplo"}).pretty() |
where by = 'Ejemplo' |
| Menor que | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
| Menor o igual que | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
| Mayor que | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
| Mayor o igual que | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
| No igual a | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
Condición AND en MongoDB
El método find() de MongoDB puede aceptar múltiples claves (key), cada clave separada por una coma, es decir, la condición AND del SQL convencional.
El formato de sintaxis es el siguiente:
>db.col.find({key1:value1, key2:value2}).pretty()
Ejemplo
El siguiente ejemplo consultabyytitlemediante la clave los datos deTutorial de EjemploMedioTutorial de MongoDB.
> db.col.find({"by":"Ejemplo", "title":"MongoDB 教程"}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Ejemplo",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
En el ejemplo anterior, es similar a la sentencia WHERE:WHERE by='Ejemplo' AND title='Tutorial de MongoDB'
Condición OR en MongoDB
La sentencia de condición OR en MongoDB utiliza la palabra clave$or, el formato de sintaxis es el siguiente:
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
Ejemplo
En el siguiente ejemplo, demostramos consultar documentosbydonde el valor de la clave esTutorial de Ejemploo dondetitleel valor de la clave esTutorial de MongoDB.
>db.col.find({$or:[{"by":"Ejemplo"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Ejemplo",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
Uso combinado de AND y OR
El siguiente ejemplo demuestra el uso combinado de AND y OR, la sentencia SQL convencional equivalente es:'where likes>50 AND (by = 'Ejemplo' OR title = 'Tutorial de MongoDB')'
>db.col.find({"likes": {$gt:50}, $or: [{"by": "Ejemplo"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Ejemplo",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
Otras extensiones