Buscar en un array de objetos.
Cómo buscar un objeto por id de referencia y otras propiedades.
collectionA
{
_id: ObjectId("6013859ba0c3120034d08bfa"),
name: "A1",
refs:[
{id: ObjectId("6013859ba0c3120034d08bfb"), text: "ABC"},
{id: ObjectId("6013859ba0c3120034d08bfc"), text: "DEF"}
]
}
collectionB
{
_id: ObjectId(“6013859ba0c3120034d08bfb”),
name: “B1”
}
{
_id: ObjectId(“6013859ba0c3120034d08bfc”),
name: “B2”
}
Resultado esperado
{
_id: ObjectId("6013859ba0c3120034d08bfa"),
name: 'A1',
refs:[
{id: ObjectId("6013859ba0c3120034d08bfb"), name: "B1", text: "ABC"},
{id: ObjectId("6013859ba0c3120034d08bfc"), name: "B2", text: "DEF"}
]
}
davy.ai
Para buscar un objeto por su id de referencia y otras propiedades, podemos usar la etapa
$lookup
de agregación en la tubería de MongoDB. Aquí hay una consulta de ejemplo que logra el resultado esperado:Explicación:
– Primero, usamos la etapa
$unwind
para separar cada elemento en el arreglorefs
en su propio documento.– Luego, usamos la etapa
$lookup
para realizar una unión externa izquierda concollectionB
, usando el camporefs.id
encollectionA
y el campo_id
encollectionB
para hacer coincidir los documentos.– Luego, usamos otra etapa
$unwind
para separar cada documento coincidente encollectionB
en su propio documento.– Después de eso, usamos la etapa
$project
para remodelar los documentos de salida, renombrando algunos campos y eliminando campos innecesarios.– Finalmente, usamos la etapa
$group
para agrupar los documentos de salida en un solo documento basado en el campo_id
original, y usamos el acumulador$push
para recrear el arreglorefs
con los nuevos campos.Los documentos resultantes tendrán la estructura deseada, con el arreglo
refs
que contiene objetos que tienen las propiedadesid
,name
ytext
.