使用Mongoose进行$lookup

5
我有两个收集品,类似于清单和任务。两个架构如下所示:
清单架构将如下所示。
{
  "_id": "5b7d0f77e231b6b530b0ee5a",
  "audit_checklist_type": "Weekly"

}, {
  "_id": "5b7d3f33e7a57f38084efb09",
  "audit_checklist_type": "Daily"
}

任务模式将如下所示。
{
  "_id": "5b7d65daf74be318e8378cf9",
  "checklist_id": "5b7d3f33e7a57f38084efb09"
}, {
  "_id": "5b7d662df74be318e8378cfb",
  "checklist_id": "5b7d3f33e7a57f38084efb09"
}

我的问题是:
AuditChecklist.aggregate([
  {
    $match: {
      $and: [
        audit_checklist_type: "Daily"
      ]
    },
  },
  {
    $lookup: {
      from: 'AuditTask',
      localField: '_id',
      foreignField: 'checklist_id',
      as: 'TaskData',
    },
  },
]).exec()

我想要得到的输出是:
{
  "_id": "5b7d3f33e7a57f38084efb09",
  "TaskData ": [{
      "_id": "5b7d65daf74be318e8378cf9",
      "checklist_id": "5b7d3f33e7a57f38084efb09"
    },
    {
      "_id": "5b7d662df74be318e8378cfb",
      "checklist_id": "5b7d3f33e7a57f38084efb09"
    }
  ]
}

但对我来说,TaskData输出为空。非常感谢您的帮助。提前致谢!

你可能会在 auditTaskData 中获取到数据,或者你的数据库名称不正确... - Ashh
抱歉,我编辑了一下。那只是TaskData - Sasi Rekha
实际上,我像下面这样声明AuditTask变量: var AuditTask = mongoose.model('AuditTask'); - Sasi Rekha
无论是使用 import 还是 require 导入 AuditTask,都像导入 AuditChecklist 一样,并将你的 from 字段更改为 AuditTask.collection.name - Ashh
哇,它像冠军一样运行了。非常感谢你@Anthony Winzlet。 - Sasi Rekha
显示剩余3条评论
1个回答

13

Mongoose将数据库名称进行复数化,所以不要使用AuditTask,而应该使用audittasks

或者

你可以先在你的文件中导入数据库:

// ESM:
import AuditTask from './AuditTask'
// or CommonJS: 
const AuditTask = require('./AuditTask')

并在您的$lookup聚合中使用它:

{ '$lookup': {
  'from': AuditTask.collection.name,
  'localField': '_id',
  'foreignField': 'checklist_id',
  'as': 'TaskData'
}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接