Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB在$lookup上聚合多个本地字段_Javascript_Node.js_Mongodb_Aggregate - Fatal编程技术网

Javascript MongoDB在$lookup上聚合多个本地字段

Javascript MongoDB在$lookup上聚合多个本地字段,javascript,node.js,mongodb,aggregate,Javascript,Node.js,Mongodb,Aggregate,我使用一个聚合来为每个父文档获取4个子文档。但子文档都来自同一个集合 [ { '$lookup': { 'from': 'Roles', 'localField': 'dentistId', 'foreignField': '_id', 'as': 'DENTIST' } }, { '$lookup': { 'from': 'Roles', 'localField': 'doct

我使用一个聚合来为每个父文档获取4个子文档。但子文档都来自同一个集合

   [
  {
    '$lookup': {
      'from': 'Roles', 
      'localField': 'dentistId', 
      'foreignField': '_id', 
      'as': 'DENTIST'
    }
  }, {
    '$lookup': {
      'from': 'Roles', 
      'localField': 'doctorId', 
      'foreignField': '_id', 
      'as': 'DOCTOR'
    }
  }, {
    '$lookup': {
      'from': 'roles', 
      'localField': 'lawyerId', 
      'foreignField': '_id', 
      'as': 'LAWYER'
    }
  }, {
    '$lookup': {
      'from': 'roles', 
      'localField': 'ceoId', 
      'foreignField': '_id', 
      'as': 'CEO'
    }
  }
]
我使用的是MongoDB>4的一个版本。我希望只使用1
$lookup
,然后执行以下操作

localField: { $in:[dentistId, doctorId, lawyerId, ceoId }
有没有办法巩固这一点

谢谢

  • 您可以添加一个字段
    childDocs
    ,并在其中推送所有ID
  • localField

有没有办法保证返回角色的顺序?也就是说,根据上面的例子,如果
childDocs
(来自$lookup)数组是牙医、医生、律师、ceo,那就太好了(因此,$addFields中的childDocs的顺序是no,它不能保证文档按照输入ID的顺序。但是我可以说,返回文档的顺序将与当前实际集合中的顺序相同,即一个集合中的4个文档的顺序
[1,2,3,4]
,如果我使用
{field:{$in:[1,2]}
进行查询,它将返回
[1,2]
,如果我使用
{field:{$in:[2,1]}}
进行查询,它将返回与第一次查询相同的
[1,2]
,返回实际集合中存在的相同顺序。
[
  {
    $addFields: {
      childDocs: [
        "$dentistId",
        "$doctorId",
        "$lawyerId",
        "$ceoId"
      ]
    }
  },
  {
    '$lookup': {
      'from': 'roles', 
      'localField': 'childDocs', 
      'foreignField': '_id', 
      'as': 'childDocs'
    }
  }
]