【发布时间】:2021-10-24 02:13:47
【问题描述】:
我有一个用户集合和一个用户订单集合。 当我检索用户时,我将所有订单添加到返回的结构中以使客户端更简单。 但是,我使用的是 NextJS,因此像 Date 和 ObjectId 这样的对象必须在到达客户端之前进行 toString 处理。 我在 JS 中手动进行了这些类型转换和用户和订单之间的链接,但是在 Mongo 驱动程序中这样做会清理我的代码很多。 所以现在我正在查看聚合,添加订单很简单,但是我无法终生了解或谷歌如何引用订单的 _id 字段(或其他字段)将其转换为字符串。
这是聚合的样子:
[
{
$lookup: {
from: 'orders',
localField: 'id',
foreignField: 'user_id',
as: 'orders',
},
},
{
$project: {
_id: { $toString: '$_id' },
name: 1,
'orders._id': { $toString: '???' },
'orders.order': 1,
},
}
]
我在“orders._id”部分放了什么?我尝试了很多组合,但我得到的最好的是 Mongo 抱怨我正在尝试将数组转换为字符串。
给定一个用户
{ _id: ObjectId('objectId1'), id: 'id', name: 'name' }
还有订单
{ _id: ObjectId('objectId2'), user_id: 'id', order: { ... } }
最终结果应该是
{ _id: 'objectId1', name: 'name', orders: [ { _id: 'objectId2', order: { ... } } ] }
【问题讨论】:
标签: mongodb aggregation-framework