Mongoose $lookup对象返回空数组

6

我尝试过其他类似的问题,但似乎都对我不起作用。 我有两个集合:

leads

const mongoose = require("mongoose");
const id = mongoose.Schema.Types.ObjectId;

const leadsSchema = mongoose.Schema(
  {
    _id: id,
    userId: { type: id, ref: "User", required: true },
    leadName: String,
    leads: [
      {
        _id: id,
        name: String,
        status: { type: String, required: false, default: "New" },
        leadActivity: { type: String, required: false, default: "No Campaign Set" },
        headline: { type: String, required: false },
        location: { type: String, required: false },
        leadType: { type: id, ref: "LeadsCategory", required: true },
      }
    ],
    campaignAssociated: {type: id, ref: "campaign"},
  },
  {
    timestamps: true
  }
);

module.exports = mongoose.model("lead", leadsSchema);

主类别

const mongoose = require("mongoose");

const leadsCategorySchema = mongoose.Schema(
  {
    _id: mongoose.Schema.Types.ObjectId,
    name: {
      type: String,
      required: false,
    },
    leadsData: [{ type: Array, ref: "lead" }],
  },
  { timestamps: true }
);

module.exports = mongoose.model("LeadsCategory", leadsCategorySchema);

我试图将leadscategory模式中的负责人名字引用/填充到Leads中。

exports.get_single_lead_info = (req, res) => {
  const { userId } = req.user;

  const { leadid } = req.body;

  let idToSearch = mongoose.Types.ObjectId(leadid);

  Lead.aggregate([
    {
      $lookup: {from: 'leadscategories', localField: 'leadType', foreignField: 'name', as: 'type as'}
    },
    {
      $match: {
        userId: mongoose.Types.ObjectId(userId),
      },
    },
    {
      $unwind: "$leads",
    },
    {
      $match: {
        "leads._id": idToSearch,
      },
    },
  ])
  .exec(function (err, result) {
    if (err) {
      return res.status(400).json({ message: "Unable to fetch data", err });
    }

    if (!result.length) {
      res.status(404).json("No result found");
    } else {
      res.status(200).json({ message: "Lead info found", result });
    }
  });
};

但是每次它都会将查找结果输出为空数组:
{
    "message": "Lead info found",
    "result": [
        {
            "_id": "5ece11cbac50c434dc4b7f2c",
            "leadName": "python",
            "leads": {
                "status": "New",
                "leadActivity": "Campaign Set",
                "name": "Hailey",
                "headline": "Machine Learning | Python",
                "location": "New Delhi Area, India",
                "_id": "5ece11cbac50c434dc4b7f29",
                "leadType": "5ebce0f81947df2fd4eb1060"
            },
            "userId": "5eba83d37d4f5533581a7d58",
            "createdAt": "2020-05-27T07:07:55.231Z",
            "updatedAt": "2020-05-27T10:47:42.098Z",
            "__v": 0,
            "type as": [] //<--- Need lead type name associated inside this
        }
    ]
}

输入:"leadid": "5ece11cbac50c434dc4b7f29" 感谢任何帮助。


如果您提供了输入文件,那么回答会更容易些。 - SuleymanSah
我只看到你得到的结果,你需要展示相关集合的输入样本文档。 - SuleymanSah
我已经添加了完整的相关代码。包括模式、控制器和输出。 - program_bumble_bee
1个回答

2
[
  {
    $match: {
      userId: mongoose.Types.ObjectId(userId),
    },
  },
  {
    $unwind: "$leads",
  },
  {
    $match: {
      'leads._id': idToSearch,
    },
  },
  {
    $lookup: {
      from: 'leadscategories',
      localField: 'leads.leadType',
      foreignField: '_id',
      as: 'type as'
    }
  },
]

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