Tengo dos colecciones: perfiles y contenidos .
La colección de perfiles se ve así:
{ _id: ObjectId('618ef65e5295ba3132c11111'), blacklist: [ObjectId('618ef65e5295ba3132c33333'), ObjectId('618ef65e5295ba3132c22222')], //more fields }La colección de contenido se ve así:
{ _id: ObjectId('618ef65e5295ba3132c00000'), owner: ObjectId('618ef65e5295ba3132c22222'), //more fields } Lo que necesito es obtener aquellos contenidos donde el owner no está incluido en la blacklist . Pensé en poner el campo de lista negra en los documentos de contenido . Podría obtener el perfil por id por separado (en otra consulta) y configurarlo manualmente en la agregación donde obtengo los contenidos, pero esto requiere una conexión adicional.
Entonces mi pregunta es: ¿Hay alguna manera de agregar mi perfil en cada documento de otra colección? ten en cuenta que tengo el ID del perfil.
Aquí hay un código psuedo sobre cómo "debería" verse, primero obteniendo los propietarios de las listas negras, luego usando esa variable como un parámetro en la canalización.
const profileId = input; const blackListIds = await db.getCollection('profiles').distinct('blacklist', { _id: profileId }); const aggregationResults = await db.getCollection('contents').aggregate([ { $match: { owner: {$nin: blackListIds} } } ... continuation of pipeline ... ])