我实际上解决了这个问题,但是,在这里发布一个问题,希望有人会发现这个解决方案很有用。我正在寻找一个纯粹的 MongoDB 查询/聚合,它可以作为 FB 的 DataLoader 的批处理获取器。后来我不想.map()
在服务器上,所以查询结果必须是一个对象,键是 id,值是文档本身。
问问题
71 次
1 回答
0
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);
于 2020-01-31T09:40:21.460 回答