Coincidir con la posición del elemento
En este paso, aprenderemos cómo consultar arrays de MongoDB al coincidir con posiciones específicas de los elementos. MongoDB ofrece maneras poderosas de buscar elementos en ubicaciones exactas dentro de un array.
Primero, iniciemos la shell de MongoDB y aseguremos de que estamos usando nuestra base de datos anterior:
mongosh
use arraylab
Cree una nueva colección con documentos que tengan arrays donde la posición de los elementos importa:
db.courses.insertMany([
{
name: "Web Development Bootcamp",
modules: ["HTML", "CSS", "JavaScript", "React", "Node.js"],
difficulty: ["beginner", "intermediate", "advanced"]
},
{
name: "Data Science Course",
modules: [
"Python",
"Statistics",
"Machine Learning",
"Deep Learning",
"AI"
],
difficulty: ["intermediate", "advanced", "expert"]
},
{
name: "Cybersecurity Program",
modules: [
"Network Security",
"Ethical Hacking",
"Cryptography",
"Penetration Testing",
"Incident Response"
],
difficulty: ["intermediate", "advanced", "expert"]
}
]);
Ahora, consultemos documentos al coincidir con elementos en posiciones específicas de array:
// Encuentra cursos donde el primer módulo es "HTML"
db.courses.find({ "modules.0": "HTML" });
// Encuentra cursos donde el tercer módulo es "JavaScript"
db.courses.find({ "modules.2": "JavaScript" });
// Encuentra cursos donde el segundo nivel de dificultad es "advanced"
db.courses.find({ "difficulty.1": "advanced" });
Salida de ejemplo:
// Cursos con HTML como primer módulo
[
{
_id: ObjectId("..."),
name: 'Web Development Bootcamp',
modules: [ 'HTML', 'CSS', 'JavaScript', 'React', 'Node.js' ],
difficulty: [ 'beginner', 'intermediate', 'advanced' ]
}
]
// Cursos con JavaScript como tercer módulo
[
{
_id: ObjectId("..."),
name: 'Web Development Bootcamp',
modules: [ 'HTML', 'CSS', 'JavaScript', 'React', 'Node.js' ],
difficulty: [ 'beginner', 'intermediate', 'advanced' ]
}
]
// Cursos con "advanced" como segundo nivel de dificultad
[
{
_id: ObjectId("..."),
name: 'Data Science Course',
modules: [ 'Python', 'Statistics', 'Machine Learning', 'Deep Learning', 'AI' ],
difficulty: [ 'intermediate', 'advanced', 'expert' ]
},
{
_id: ObjectId("..."),
name: 'Cybersecurity Program',
modules: [ 'Network Security', 'Ethical Hacking', 'Cryptography', 'Penetration Testing', 'Incident Response' ],
difficulty: [ 'intermediate', 'advanced', 'expert' ]
}
]
También puedes combinar consultas basadas en posición con otras condiciones:
// Encuentra cursos donde el primer módulo es "HTML" y la segunda dificultad es "intermediate"
db.courses.find({
"modules.0": "HTML",
"difficulty.1": "intermediate"
});