首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RethinkDB (javascript)中创建不像文档中那样工作的辅助索引

在RethinkDB (javascript)中创建不像文档中那样工作的辅助索引
EN

Stack Overflow用户
提问于 2015-12-08 20:33:43
回答 2查看 220关注 0票数 1

我正在根据RethinkDB中的两个字段(实际上是rethinkdbdash驱动程序)在javascript中创建一个索引。代码如下所示:r.table('someTable').indexList().contains("indexName").do(containsIndex => { return r.branch( containsIndex, {created: 0}, r.table('someTable').indexCreate("indexName", [r.row("field1"), r.row("field2")]) ); }).run();

因此,如果索引还不存在,它就有条件地创建索引。分支确实适用于单字段索引。但在这种情况下,它返回一个ReqlCompileError: Cannot use r.row in nested queries. Use functions instead

docs (create/)清楚地给出了这个例子:r.table('comments').indexCreate('postAndDate', [r.row("postId"), r.row("date")]).run(conn, callback)

那我错过了什么?使用rethinkdbdash t驱动程序正在改变什么吗?如果我确实使用了一个函数(正如错误消息所建议的那样),我可以连接我的两个字段,但是如何使用该索引进行查询呢?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-08 23:22:31

可以在非嵌套查询(如文档中的示例)中使用r.row,但对于嵌套查询,则需要使用实际函数。当您将indexCreate放入do中时,它成为嵌套查询的一部分。

如果不是r.table('someTable').indexCreate("indexName", [r.row("field1"), r.row("field2")]),而是在查询中编写r.table('someTable').indexCreate('indexName', function(row) { return [row('field1'), row('field2')]; }),那么它应该可以工作。

票数 2
EN

Stack Overflow用户

发布于 2015-12-08 22:23:21

在创建复合索引时,我不知道如何正确地进行这种分支,但是如果您试图创建一个已经存在的索引,RethinkDB只会警告您,所以如果您只捕获它并继续:

代码语言:javascript
复制
function createPostAndDateIndex() {
  return r.table('comments').indexCreate('postAndDate', 
    [r.row("postId"), r.row("date")]).run();
}

function createDateIndex() {
  return r.table('comments').indexCreate('d', 'date').run() 
}

function initDb() {
  return createPostAndDateIndex().error(console.warn)
    .then(createDateIndex).error(console.warn);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34165489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档