MongoDB - Documento de consulta
En este capítulo, aprenderemos cómo consultar documentos de la colección MongoDB.
El método find ()
Para consultar datos de la colección de MongoDB, debe usar MongoDB's find() método.
Sintaxis
La sintaxis básica de find() El método es el siguiente:
>db.COLLECTION_NAME.find()
find() El método mostrará todos los documentos de forma no estructurada.
Ejemplo
Supongamos que hemos creado una colección llamada mycol como:
> use sampleDB
switched to db sampleDB
> db.createCollection("mycol")
{ "ok" : 1 }
>
E insertó 3 documentos en él usando el método insert () como se muestra a continuación:
> db.mycol.insert([
{
title: "MongoDB Overview",
description: "MongoDB is no SQL database",
by: "tutorials point",
url: "http://www.tutorialspoint.com",
tags: ["mongodb", "database", "NoSQL"],
likes: 100
},
{
title: "NoSQL Database",
description: "NoSQL database doesn't have tables",
by: "tutorials point",
url: "http://www.tutorialspoint.com",
tags: ["mongodb", "database", "NoSQL"],
likes: 20,
comments: [
{
user:"user1",
message: "My first comment",
dateCreated: new Date(2013,11,10,2,35),
like: 0
}
]
}
])
El siguiente método recupera todos los documentos de la colección:
> db.mycol.find()
{ "_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Overview", "description" : "MongoDB is no SQL database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5dd4e2cc0821d3b44607534d"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-09T21:05:00Z"), "like" : 0 } ] }
>
El método pretty ()
Para mostrar los resultados de forma formateada, puede utilizar el método pretty ().
Sintaxis
>db.COLLECTION_NAME.find().pretty()
Ejemplo
El siguiente ejemplo recupera todos los documentos de la colección denominada mycol y los organiza en un formato fácil de leer.
> db.mycol.find().pretty()
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no SQL database",
"by" : "tutorials point",
"url" : "http://www.tutorialspoint.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534d"),
"title" : "NoSQL Database",
"description" : "NoSQL database doesn't have tables",
"by" : "tutorials point",
"url" : "http://www.tutorialspoint.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 20,
"comments" : [
{
"user" : "user1",
"message" : "My first comment",
"dateCreated" : ISODate("2013-12-09T21:05:00Z"),
"like" : 0
}
]
}
El método findOne ()
Aparte del método find (), hay findOne() método, que devuelve solo un documento.
Sintaxis
>db.COLLECTIONNAME.findOne()
Ejemplo
El siguiente ejemplo recupera el documento con el título Descripción general de MongoDB.
> db.mycol.findOne({title: "MongoDB Overview"})
{
"_id" : ObjectId("5dd6542170fb13eec3963bf0"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no SQL database",
"by" : "tutorials point",
"url" : "http://www.tutorialspoint.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
RDBMS Equivalentes de la cláusula Where en MongoDB
Para consultar el documento sobre la base de alguna condición, puede utilizar las siguientes operaciones.
Operación | Sintaxis | Ejemplo | Equivalente a RDBMS |
---|---|---|---|
Igualdad | {<clave>: {$ eg; <valor>}} | db.mycol.find ({"por": "punto de tutoriales"}). pretty () | donde by = 'punto de tutoriales' |
Menos que | {<clave>: {$ lt: <valor>}} | db.mycol.find ({"me gusta": {$ lt: 50}}). pretty () | donde me gusta <50 |
Menor que igual | {<clave>: {$ lte: <valor>}} | db.mycol.find ({"me gusta": {$ lte: 50}}). pretty () | donde me gusta <= 50 |
Mas grande que | {<clave>: {$ gt: <valor>}} | db.mycol.find ({"me gusta": {$ gt: 50}}). pretty () | donde me gusta> 50 |
Mayor que igual | {<clave>: {$ gte: <valor>}} | db.mycol.find ({"me gusta": {$ gte: 50}}). pretty () | donde me gusta> = 50 |
No es igual | {<clave>: {$ ne: <valor>}} | db.mycol.find ({"me gusta": {$ ne: 50}}). pretty () | donde me gusta! = 50 |
Valores en una matriz | {<clave>: {$ en: [<valor1>, <valor2>, …… <valorN>]}} | db.mycol.find ({"nombre": {$ in: ["Raj", "Ram", "Raghu"]}}). bonita () | Donde el nombre coincide con cualquiera de los valores en: ["Raj", "Ram", "Raghu"] |
Valores que no están en una matriz | {<clave>: {$ nin: <valor>}} | db.mycol.find ({"nombre": {$ nin: ["Ramu", "Raghav"]}}). bonita () | Donde los valores de nombre no están en la matriz: ["Ramu", "Raghav"] o, no existe en absoluto |
Y en MongoDB
Sintaxis
Para consultar documentos basados en la condición AND, debe usar $ y palabra clave. A continuación se muestra la sintaxis básica de AND -
>db.mycol.find({ $and: [ {<key1>:<value1>}, { <key2>:<value2>} ] })
Ejemplo
El siguiente ejemplo mostrará todos los tutoriales escritos por 'punto de tutoriales' y cuyo título es 'Descripción general de MongoDB'.
> db.mycol.find({$and:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no SQL database",
"by" : "tutorials point",
"url" : "http://www.tutorialspoint.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
Para el ejemplo anterior, la cláusula where equivalente será ' where by = 'tutorials point' AND title = 'MongoDB Overview' '. Puede pasar cualquier número de pares de clave y valor en la cláusula de búsqueda.
O en MongoDB
Sintaxis
Para consultar documentos basados en la condición OR, debe usar $orpalabra clave. A continuación se muestra la sintaxis básica deOR -
>db.mycol.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
Ejemplo
El siguiente ejemplo mostrará todos los tutoriales escritos por 'punto de tutoriales' o cuyo título es 'Descripción general de MongoDB'.
>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
"_id": ObjectId(7df78ad8902c),
"title": "MongoDB Overview",
"description": "MongoDB is no sql database",
"by": "tutorials point",
"url": "http://www.tutorialspoint.com",
"tags": ["mongodb", "database", "NoSQL"],
"likes": "100"
}
>
Usando AND y OR juntos
Ejemplo
El siguiente ejemplo mostrará los documentos que tienen gustos superiores a 10 y cuyo título es "Descripción general de MongoDB" o "punto de tutoriales". SQL equivalente donde la cláusula es'where likes>10 AND (by = 'tutorials point' OR title = 'MongoDB Overview')'
>db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"},
{"title": "MongoDB Overview"}]}).pretty()
{
"_id": ObjectId(7df78ad8902c),
"title": "MongoDB Overview",
"description": "MongoDB is no sql database",
"by": "tutorials point",
"url": "http://www.tutorialspoint.com",
"tags": ["mongodb", "database", "NoSQL"],
"likes": "100"
}
>
NOR en MongoDB
Sintaxis
Para consultar documentos basados en la condición NOT, debe utilizar la palabra clave $ not. A continuación se muestra la sintaxis básica deNOT -
>db.COLLECTION_NAME.find(
{
$not: [
{key1: value1}, {key2:value2}
]
}
)
Ejemplo
Supongamos que hemos insertado 3 documentos en la colección. empDetails como se muestra a continuación -
db.empDetails.insertMany(
[
{
First_Name: "Radhika",
Last_Name: "Sharma",
Age: "26",
e_mail: "[email protected]",
phone: "9000012345"
},
{
First_Name: "Rachel",
Last_Name: "Christopher",
Age: "27",
e_mail: "[email protected]",
phone: "9000054321"
},
{
First_Name: "Fathima",
Last_Name: "Sheik",
Age: "24",
e_mail: "[email protected]",
phone: "9000054321"
}
]
)
El siguiente ejemplo recuperará los documentos cuyo nombre no es "Radhika" y el apellido no es "Christopher".
> db.empDetails.find(
{
$nor:[
40
{"First_Name": "Radhika"},
{"Last_Name": "Christopher"}
]
}
).pretty()
{
"_id" : ObjectId("5dd631f270fb13eec3963bef"),
"First_Name" : "Fathima",
"Last_Name" : "Sheik",
"Age" : "24",
"e_mail" : "[email protected]",
"phone" : "9000054321"
}
NO en MongoDB
Sintaxis
Para consultar documentos basados en la condición NOT, debe usar la palabra clave $ not, la siguiente es la sintaxis básica de NOT -
>db.COLLECTION_NAME.find(
{
$NOT: [
{key1: value1}, {key2:value2}
]
}
).pretty()
Ejemplo
El siguiente ejemplo recuperará los documentos cuya antigüedad no sea superior a 25
> db.empDetails.find( { "Age": { $not: { $gt: "25" } } } )
{
"_id" : ObjectId("5dd6636870fb13eec3963bf7"),
"First_Name" : "Fathima",
"Last_Name" : "Sheik",
"Age" : "24",
"e_mail" : "[email protected]",
"phone" : "9000054321"
}