Tengo dos colecciones.
Clientes:
{ "_id" : ObjectId("584aac38686860d502929b8b"), "name" : "user", "email" : "user@gmail.com" }Publicaciones:
{ "_id" : ObjectId("584aaca6686860d502929b8d"), "title" : "Post", "description":"description", "user_id" : "584aac38686860d502929b8b" } Quiero unirme a esta colección según el ID de usuario (de la colección de posts ) - _id (en la colección de customers ).
Intenté la siguiente consulta:
dbo.collection('customers').aggregate([ { $lookup: { from: 'posts', localField: 'user_id', foreignField: '_id', as: 'posts' } } ])pero no funciona.
La salida que estoy obteniendo:
{ "_id": "584aac38686860d502929b8b", "name": "user", "email": "user@gmail.com", "posts": [] }De la colección de posts adjuntas, user_id era una cadena pero no ObjectId .
Para comparar, primero debe convertir user_id a ObjectId .
db.customers.aggregate([ { $lookup: { from: "posts", let: { customerId: "$_id" }, pipeline: [ { $match: { $expr: { $eq: [ { "$toObjectId": "$user_id" }, "$$customerId" ] } } } ], as: "posts" } } ])Ejemplo de parque infantil de Mongo
Nota: De su $lookup existente, ha invertido localField y foreignField .
Coincidencia de igualdad con una sola condición de combinación
{ $lookup: { from: <collection to join>, localField: <field from the input documents>, foreignField: <field from the documents of the "from" collection>, as: <output array field> } }