首页 > 解决方案 > Mongoose $lookup 对象返回空数组

问题描述

我已经尝试过其他类似的问题,但似乎对我没有任何帮助。我有两个收藏:

导致

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架构引用/填充到潜在客户中

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" 任何帮助表示赞赏。

标签: node.jsmongooseaggregate

解决方案


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

推荐阅读