Mi esquema se ve así
colección de lotes:
{"_id":{"$oid":"61e82ed943389ffc5d277055"}, "name":"Batch ready to process", "DocumentIDs":["61e82edb75d2841f2a8a023d"]}colección de documentos:
{"_id":{"$oid":"61e82edb75d2841f2a8a023d"}, "DocumentStatus":{"ActionId":"1","ActionType":"Type1","Status":"Status1"} }Entonces, la colección de lotes tiene una matriz de ID de documentos. ¿Cómo puedo fusionar estas 2 colecciones? Estaba tratando de usar la búsqueda agregada, pero parece que no funcionará en este caso porque su esquema solo permite comparar campos simples y necesito verificar si la ID del documento existe en la matriz "DocumentIDs".
Como resultado, solo necesito una lista de elementos con solo 2 campos que existen en la colección de documentos: "ActionType" y "Status". Necesito una lista de este tipo para un ID de lote en particular, por lo que el ID de lote es un criterio de filtro.
Este es el esquema de la búsqueda de agregación
/** * from: The target collection. * localField: The local join field. * foreignField: The target join field. * as: The name for the results. * pipeline: The pipeline to run on the joined collection. * let: Optional variables to use in the pipeline field stages. */ { from: 'string', localField: 'string', foreignField: 'string', as: 'string' }-Jacek
posiblemente esto:
db.getCollection('batches').aggregate([ {$match: {_id : ObjectId('61e82ed943389ffc5d277055')}}, {$unwind : {"path" : "$DocumentIDs"}}, {$project: { _id: 1, "documentId" : {$toObjectId: "$DocumentIDs"} } }, {$lookup: { from: 'documents', localField: "documentId", foreignField: "_id", as: "join_results" } }, {$unwind: {"path" : "$join_results"}}, {$project: { "_id" : 0, "actionType" : "$join_results.DocumentStatus.ActionId", "status" : "$join_results.DocumentStatus.Status", } } ])