猫鼬聚合中无法识别的表达式'$ toObjectId'

时间:2020-04-09 04:20:27

标签: node.js mongodb mongoose

在猫鼬聚合中,我得到的错误为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。

任何帮助建议都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

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

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

我只是一个初学者。如果我的回答不方便或无关紧要,我感到抱歉。只是个主意。谢谢

答案 1 :(得分:0)

我遇到了这个问题,并在努力了两天,
对我来说,解决方案是确保MongoDB是最新的,

我在MLab.com上托管了我的数据库,该数据库为我提供了Mongo 3.6,而$toObjectId仅在Mongo 4.0中可用< br />
我免费将服务器迁移到Mongo Atlas,这为我提供了最新版本,一切运行顺利。