【问题标题】:Unrecognized expression '$toObjectId' in mongoose aggregationmongoose 聚合中无法识别的表达式“$toObjectId”
【发布时间】:2020-04-19 02:38:26
【问题描述】:

在我的猫鼬聚合中,我收到Unrecognized expression '$toObjectId' 的错误。我的 MongoDB 版本是 4.2.5,猫鼬版本是 5.9.6。根据文档,此运算符在 4.x 版本中可用,理想情况下应该可以工作。

  const trips = await Tickets.aggregate([
              {$match: {trip: Utils.strToObjectId(tripid) }},
              {$project: {_id:0,status:1, bookedBy:1,name:1,totalFare:1, seats:1, mode:1 }},
              {$group: {_id: {$toObjectId:"$bookedBy"}, bookings: {$push: {status: "$status", mode:"$mode", name: "$name", from: "$sourceCity", to: "$destinationCity", seats: "$seats" ,fare: "$totalFare", pnr: "$shortid" }}  }},
              {$lookup: {from:"users", localField:"bookedBy", foreignField:"_id",as:"user"}},
              ]);

在我的情况下,bookedBy 被转换为在 $lookup 管道中不匹配的字符串。所以为了解决这个问题,我正在尝试将其转换为 objectId。

感谢任何帮助建议。

【问题讨论】:

  • 不知道为什么会失败!!这个Utils.strToObjectId(tripid) 返回什么?另外我猜你的$lookup 不起作用,因为你在$group 之后保留bookedBy 字段,你可以逐步删除并检查它实际失败的位置,但我猜问题不是$group..跨度>
  • 请告诉bookedBy字段的值是多少?语法{ $group: { _id: { $toObjectId: "$bookedBy"} 是正确的,与$group 一起使用。
  • @prasad_ in bookingBy 我有字符串格式的 objectId。例如"5e841a3fa9f5d872777aa476"
  • @whoami 将字符串转换为猫鼬 ObjectId 的简单函数。下面是代码 const strToObjectId = (str)=>{ return mongoose.Types.ObjectId(str); }
  • bookedBy 字段包含 objectId,但它是字符串格式。如果我应用 $lookup 那么它不匹配,因为在 mongodb 中它是 ObjectId。这就是为什么我尝试将输入转换为 ObjectId $toObjectId

标签: node.js mongodb mongoose


【解决方案1】:

我遇到了这个问题,为此苦苦挣扎了两天,
对我来说,解决方案是确保我的 MongoDB 是最新的,

我在 MLab.com 上托管我的,它为我提供了 Mongo 3.6,而 $toObjectId 仅适用于 Mongo 4.0

我免费将我的服务器迁移到 Mongo Atlas,它为我提供了最新版本,一切运行顺利。

【讨论】:

    【解决方案2】:

    如果您在访问由 MongoDB 创建的 objectId 时遇到问题,那么为什么不创建自己的唯一对象 ID 并访问任何您想要的地方。通过使用它,您无需担心转换为对象 ID。例如,

    const MUUID = require('uuid-mongodb'); 
    id: {
            type: 'object',
            unique: true,
            default: () => MUUID.v1().toString(),
        }
    

    我只是一个初学者。如果我的回答不方便或不相关,我很抱歉。这只是一个想法。谢谢

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多