Tengo 2 tiendas de documentos mongodb y cliente.
Los documentos de la tienda son como a continuación.
{ id: 1, zipcodes:[ '12345', '11111', ] } { id:2, zipcodes:[ '45678', ] }los documentos del cliente son como a continuación
{ id:20, name: 'First Last', address: [ { id:110, address: 'address line1', zipcode: '12345', }, { id:111, address: 'address new', zipcode: '45678', } ] }, { id:25, name: 'First Last2', address: [ { id:113, address: 'address new', zipcode: '45678', }, ] }, { id:29, name: 'First Name', address: [ { id:119, address: 'address liner', zipcode: '11111', }, { id:120, address: 'address new2', zipcode: '12345', } ] },Rendimiento esperado. Necesito conseguir clientes en el mismo código postal
[ { zipcode: 12345, customers:[ {id:20}, {id:29}, ] }, { zipcode: 11111, customers:[ {id:29}, ] }, { zipcode: 45678, customers:[ {id:25}, ] }, ]Traté de resolver esto usando el marco de agregación mongodb pero hasta ahora no tuve suerte. No tengo idea de cómo hacer coincidir elementos de objeto en una matriz. gracias de antemano. por favor ayuda.
salida esperada agregada editada
$unwind : deconstruye la matriz de zipcodes en varios documentos.
$lookup : únete a las shops con la colección de customers .
2.1. El zipcode de $match - shops está dentro de address.zipcode de customers .
2.2. $project : decore los documentos de salida para la matriz de customers .
$project - Decora los documentos de salida.
db.shops.aggregate([ { $unwind: "$zipcodes" }, { $lookup: { from: "customers", let: { zipcodes: "$zipcodes" }, pipeline: [ { $match: { $expr: { "$in": [ "$$zipcodes", "$address.zipcode" ] } } }, { $project: { _id: 0, id: 1 } } ], as: "customers" } }, { $project: { _id: 0, zipcodes: 1, customers: 1 } } ])