【问题标题】:$lookup using mongoose$lookup 使用猫鼬
【发布时间】:2019-01-30 15:19:37
【问题描述】:

我有两个集合,例如清单和任务。两个模式如下所示

清单架构如下所示

{
  "_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 中获取您的数据,或者您的数据库名称不正确......
  • 抱歉,我编辑了它。那只是 TaskData
  • checklist_id 的类型是什么?你是直接使用 mongoose 还是 mongoclient?
  • 我将checklist_id 存储为参考ID,并且我只使用猫鼬
  • from: AuditTask.collection.name 替换这个 from: 'AuditTask'... mongoose 将集合名称复数,所以使用 AuditTask 你需要使用 audittasks@ 987654332@

标签: mongodb mongoose aggregation-framework


【解决方案1】:

Mongooose 将数据库名称复数 所以不要使用AuditTask 你应该使用audittasks

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

import AuditTask from './AuditTask` 
or 
const AuditTask = require('./AuditTask')

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2016-04-09
    • 2012-03-21
    • 2018-07-22
    • 2011-10-25
    相关资源
    最近更新 更多