寻找和替代$ toString使聚合在v3.6上运行

时间:2019-07-16 13:19:31

标签: mongodb mongodb-query

我的数据库结构在几个集合上都有一个OrderId字段,用于保存对订单的引用(我知道这种SQL-y类型)。此字段是一个字符串,而原始订单ID是一个ObjectId。

我有一个可在MongoDB v4中使用的聚合查询,我需要使其对v3.6数据库有效。

完整查询如下:

[
   {
      "$addFields": { "_OrderId": { "$toString": "$_id" }}
   },
   {
      "$lookup": {
         "from": "local-order-items",
         "localField": "_OrderId",
         "foreignField": "OrderId",
         "as": "OrderItems"
      }
   },
   {
      "$match": { 
         "xxx": "yyy"
   }
]

如您所见,查询使用$ toString将原始订单ID添加为字符串,并在查询的$ lookup阶段中使用它。

如何使用不支持$ toString的v3.6达到类似的结果?

1 个答案:

答案 0 :(得分:0)

3.6不支持$toString()管道运算符。但是,支持相关的ObjectId.ToString()方法。

我无权访问3.6实例,但这可能有用:

{
    $addFields: {
        "_OrderIdAsString": "$_id".toString(),
    }
}