匹配条件对 Mongoose 种群不起作用

u0sqgete  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(103)

我正在使用batch_id来访问CoursePurchaseModel,并使用user_id在startdate和endDate的条件下填充到userModel中,但每次都得到user_id为空。我是mongoose的新手。我错过了什么吗?
第一次

getUsersByBatchIdAccordingDate: async (startDate, endDate, batch_id) => {

    let findifUsers = await module.exports.getUsersAccordingDate(startDate, endDate);
    if (findifUsers.length == 0) {
        return Error("No users found");
    }

    let userData = await CoursePurchasedModel.find({ batch_id: batch_id })
        .populate({
            path:'user_id',
            model:'User',
            match: { createdAt: { $gte: startDate, $lte: endDate } },
            select: 'name email gender number address state pincode unique_code referedBy creditEarned refer_id LastAppOpenedTime createdAt -_id'
        }).exec();

    let userArray = [];
    for (let data of userData) {
        let newVideoObject = { ...data.user_id.toObject() }
        userArray.push(newVideoObject);
    }
    return userArray;
}
fcg9iug3

fcg9iug31#

您可以了解aggregation。您可以使用aggregation来匹配其他文档字段的值。它返回为填充字段。如果您不需要匹配,填充已按您的意愿工作。但对于匹配值,需要使用聚合。

let userData =  await CoursePurchasedModel.aggregate([
  {
    $lookup: {
      from: "userModel",
      localField: "_id",
      foreignField: "user_id",
      as: "userModelTable",
    },
  },
  {
    $match: {
      $and: [
    {
      "userModelTable.createdAt": { $gte: startDate, $lte: endDate } 
    },
    {
      batch_id: mongoose.Types.ObjectId(batch_id)
    }
    ]
  },
])

最后,在结果中,userModelTable作为填充的UserModel。而且,它已经根据createdAt进行了匹配。
我希望,它对你有用。

相关问题