考虑一个查询,我知道它将返回不超过一个结果。如果不是这样,是否有任何性能损失:
r.table('users').filter({facebookUserId:facebookUserId}).
run(connection, function(err, cursor) {
if (err) throw err;
cursor.toArray(function(err, result) {
if (err) throw err;
//return the value
});
});
我用这个:
const res = await r.table('users')
.filter({facebookUserId:facebookUserId})
.coerceTo("array")
.run(connection);
我特指的是coerceTo()命令与游标的对比。
答案 0 :(得分:3)
我会做以下事情:
facebookUserId
上创建一个索引,以便我可以使用r.table('users').getAll(myInput, {index: 'facebookUserId'})
,避免解析所有文档(更快地等待)sequence.coerceTo()
,因为它是可能分布式,可扩展的数据库中的又一步cursor.next()
,因为它一旦准备就直接提供下一个元素,而不是cursor.toArray()
,在这种情况下,它将执行相同的 plus 检查流已结束(因此必须更慢)cursor.close()
直接释放资源后立即致电cursor.next()
cursor.next()
没有无用地将我的文档封装在数组中最后:
r.table('users').getAll(facebookUserId, {index: 'facebookUserId'})
.run(connection, function(err, cursor) {
if (err) throw err;
cursor.next(function(err, item) {
cursor.close()
if (err) throw err;
//do something with item instead of result[0];
});
});
还有一件事:cursor.next()
行为可以使用cursor.each()
与return false
完成。但是,如果方法的性能不同(我不知道但a documentation note倾向于each
),我们仍然需要在关闭光标之前等待cursor.each()
的返回,这不是'39}所有事情都考虑到了最好的表现形象。
希望这有帮助!