进行
使用knex使用dataloader的示例之一显示了以下内容:
user: new DataLoader(ids => db.table('users')
.whereIn('id', ids).select()
.then(rows => ids.map(id => rows.find(x => x.id === id)))),
映射是使键数组中的键总是与结果数组中的对象相匹配,例如如果缺少具有ID 2的对象:
array of keys: [1,2,3]
array of results: [object1, undefined, object3]
如果将地图排除在外,您将获得一个不平衡的输入/输出(例如,查询缺失ID时(:
array of keys: [1,2,3]
array of results [object1, object3]
有什么方法可以用纯SQL?
map
位这意味着数据库没有具有ID 2的行,因此whereIn
不会返回更多的2行。用whereIn
在纯SQL中无法做到这一点。有了多个子征服,它可以完成,但这将是不好的解决方案。