【问题标题】:MongoDB batch get for DataLoaderMongoDB 批量获取 DataLoader
【发布时间】:2020-01-31 09:38:45
【问题描述】:

我实际上解决了这个问题,但是,在这里发布一个问题,希望有人会发现该解决方案有用。我正在寻找一个纯粹的 MongoDB 查询/聚合,它可以作为 FB 的 DataLoader 的批处理获取器。后来我不想在服务器上.map(),所以查询结果必须是一个对象,键是id,值是文档本身。

【问题讨论】:

    标签: mongodb dataloader


    【解决方案1】:
    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);
    

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2015-10-21
      • 2020-12-17
      • 2019-06-04
      • 1970-01-01
      • 2020-02-24
      • 2021-04-18
      • 1970-01-01
      • 2017-06-23
      相关资源
      最近更新 更多