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

db.myCollection.find();

Buscar documentos según la condición:

Ejemplo

db.myCollection.find({ age: { $gt: 25 } });

Buscar documentos según la condición y devolver solo los campos especificados:

Ejemplo

db.myCollection.find(
    { 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

db.col.find().pretty()
{
        "_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

db.myCollection.find({
    $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

db.myCollection.find(
    { 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

db.myCollection.find(
    {
        $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