rql从javascript中的键列表rethinkdb中获取多个文档
rql get multiple documents from list of keys rethinkdb in javascript
我有一个"person"数据表,它有一个唯一的键"id"。我有一个id列表,我想获得将作为JSON数组从客户端发送到服务器的数据。服务以JSON数组的形式接收该数据。
现在有没有一种方法可以运行一个查询来获取每个id的文档?
或者我唯一的选择是自己解析id并构建一个结果数组,然后将该数组发回。
到目前为止,我已经尝试使用。。。
-
getAll-但我无法实现这一点,因为它接受动态数量的参数,而且我不知道如何将我的值数组更改为动态数量的变量。
(例如…我想做下面显示的事情,但我做不到)
r.db('vp').table('user').getAll(["0", "0", "99"])
我只能这样。。。
r.db('vp').table('user').getAll("0", "0", "99")
-
expr和forEach-如下所示,但我认为这不可行。
var arr = []; r.expr(["0", "0", "99"]).forEach(function(id) { })
您还可以将getAll与动态数组一起使用。你必须求助于apply
var ids = [1,2,3];
var table = r.table("person");
table.getAll.apply(table, ids).run( connection, callback);
请注意,现在从1.12开始,您可以直接进行
var ids = [1,2,3];
r.table("person").getAll(r.args(ids)).run(connection, callback)
简短回答:
r.expr([id1, id2, id3]).eqJoin(function(doc) { return doc; }, r.table("person"))
更长的答案:
有几种方法可以做到这一点。以上就是我所说的规范方式。让我们来分析一下发生了什么:
首先,使用r.expr([id1, id2, id3])
,我们将对阵列进行打包,以便将其发送到服务器。
然后我们调用eqJoin
,它所做的就是获取一个值流,并为每个值调度和索引get
。function(doc) { return doc; }
是一个有点难看的破解,因为eqJoin
需要一个映射函数。
所以最后,上面的代码就相当于:
[r.table("person").get(id1), r.table("person").get(id2), r.table("person).get(id3)]
2017年更新。使用ES6排列运算符"…"
r.db('vp').table('user').getAll(...["0", "0", "99"])
您可以将.expr
与.map
一起使用,作为.eqJoin
的更清洁的替代品
r.expr(array).map(function(id) {
return r.table('user').get(id);
});
相关文章:
- 无法获取文档.GetElementById工作正常
- 用javascript从窗口获取文档,同时检查文档是否已加载
- 如何获取文档id's在BaasBox[0.9.2]中使用java脚本
- 如何获取文档数组中元素的计数-MongoDB
- node.js使用monk从数组中按id获取文档
- 无法获取文档.getElementByID(“testclick”).addEventListener
- 无论如何都要获取文档.在不删除整个页面的情况下写入即可工作
- Firefox加载项:从选项卡获取文档
- 获取文档的所有元素,id为'主导航'
- 在执行客户端脚本后获取文档源
- 获取文档的第一个字母
- jQuery 获取文档宽度和高度,不包括水平/垂直滚动条
- 如何获取文档片段中的所有文本节点
- Javascript:根本无法获取文档的实际宽度(jsfiddle提供)
- 获取文档的当前顶部位置
- 使用 JavaScript 获取文档标题元
- XPages:如何在视图中获取文档并读取值
- Windows Phone WebBrowser:获取文档高度的正确方法
- 使用 jquery 或任何首选库获取文档中包含的所有元素及其当前值
- MongoDB:获取文档和数组的一个对象