在聚合期间如何将mongodb子集合的objectid转换为字符串就位

问题描述 投票:0回答:1

我有两个这样的收藏集:

# col1
[
  {
    _id: '5ec878f79c87a300127ec503',
    ...
  },
  {...},
]
# col2
[
  {
    _id: ObjectId('5ec8da619c87a30012f41d0b'),
    record_id: '5ec878f79c87a300127ec503',
    ...
  },
  {
    _id: ObjectId('5ec8da619c87a30012ffdsk1'),
    record_id: '5ec878f79c87a300127ec503',
    ...
  },
]

我使用lookup加入两个集合。

这里是我的汇总查询:

col1.aggregate(
  [
    {'$lookup': {
       'from': 'col2',
       'localField': '_id',
       'foreignField': 'record_id',
       'as': 'records'
    }},
  ]
)

我想将col2._id从objectid转换为字符串。我试过$ project并收到错误:

{'$project': {'col2._id': {'$toString': '$col2._id'}}}

Unsupported conversion from array to string in $convert with no onError value

$ addFields$ map似乎可行。

{
  '$addField': {
    'recordsId': {
      '$map': {
        'input': '$col2',
        'as': 'r',
        'in': {'$toString': '$$r._id'}
      }
    }
  }
}

但是它返回一个数组并创建了一个新字段。那不是我想要的。

所以我的问题是:如何在聚合期间将col2._id从objectid转换为字符串?

mongodb aggregate pymongo
1个回答
0
投票

您可以尝试以下选项,我们首先将id转换为String并存储为convertedIdStr,然后使用它进行查找。

[
 {
  "$addFields": {
     "convertedIdStr": {
        "$toString": "$_id"
     }
  }
    },
 {
  "$lookup": {
     "from": "test",
     "localField": "convertedIdStr",
     "foreignField": "record_id",
     "as": "records"
  }
 }
]

希望这会有所帮助!注意我们在col1(collect1)上运行此聚合

© www.soinside.com 2019 - 2024. All rights reserved.