sql >> Base de Datos >  >> NoSQL >> MongoDB

consultar documentos que dependen de los valores de otros documentos en mongodb

Pruebe no correlacionado subconsulta de 3.6 para su caso de uso.

Algo como

User.aggregate(
 [{$lookup:{
   from: "users",
   pipeline:[
    {$match: {_id:mongoose.Types.ObjectId(id)}},
    {$project: {_id:0,blockedIds:1}}
   ],
   as: "noncr"
 }},
 {$match:{
   $expr:{
     $not:[
      {$in:[
        $_id,
        {$arrayElemAt:["$noncr.blockedIds",0]}
      ]}
    ]
  }
}},
{$project:{noncr:0}}]
)

$lookup para extraer los "blockedIds" para el ID de entrada seguido de $match para filtrar los documentos en los que "_id" no está en la lista de identificadores bloqueados.

$expr permite el uso de operadores de comparación de agregación en la etapa $match.

$arrayElemAt para obtener el primer elemento de $lookup array.

$in para comparar el _id con los bloqueados.

$project con exclusión para eliminar el campo "noncr" de la respuesta final.

Tenga en cuenta que cuando pruebe la consulta use el nombre de la colección, no el modelo o el nombre del esquema en el atributo "desde" de la etapa de búsqueda.