【发布时间】:2020-01-31 09:38:45
【问题描述】:
我实际上解决了这个问题,但是,在这里发布一个问题,希望有人会发现该解决方案有用。我正在寻找一个纯粹的 MongoDB 查询/聚合,它可以作为 FB 的 DataLoader 的批处理获取器。后来我不想在服务器上.map(),所以查询结果必须是一个对象,键是id,值是文档本身。
【问题讨论】:
标签: mongodb dataloader
我实际上解决了这个问题,但是,在这里发布一个问题,希望有人会发现该解决方案有用。我正在寻找一个纯粹的 MongoDB 查询/聚合,它可以作为 FB 的 DataLoader 的批处理获取器。后来我不想在服务器上.map(),所以查询结果必须是一个对象,键是id,值是文档本身。
【问题讨论】:
标签: mongodb dataloader
const resMapArr = db.SOMECOLLECTION.aggregate([{
$match : {
_id: { $in: _ids }
}
}, {
$group: {
_id: null,
docs: { $push: "$$ROOT" }
}
}, {
$project: {
res: {
$arrayToObject: {
$map: {
input: "$docs",
as: "el",
in: {
k: { $convert: { input: "$$el._id", to: "string" }},
v: "$$el"
}
}
}
}
}
}, {
$replaceRoot: { newRoot: "$res" }
}
])
const resMap = resMapArr[0];
这样你可以在 DataLoader 的批处理函数中返回结果为:
return _ids.map(id => resMap[id.toHexString()] || null);
【讨论】: