MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

consultar documentos que dependem de valores de outros documentos no mongodb


Experimente não correlacionado subconsulta de 3.6 para seu 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 extrair os "blockedIds" para o ID de entrada seguido por $match para filtrar os documentos onde "_id" não está na lista de blockIds.

$expr permite o uso de operadores de comparação de agregação no estágio $match.

$arrayElemAt para buscar o primeiro elemento do array $lookup.

$in para comparar o _id com os blockIds.

$project com exclusão para remover o campo "noncr" da resposta final.

Observe que quando você testar a consulta, use o nome da coleção e não o nome do modelo ou do esquema no atributo "de" do estágio de pesquisa.