【问题标题】:RethinkDB: get a document by key-value pair?RethinkDB:​​通过键值对获取文档?
【发布时间】:2018-09-02 06:24:19
【问题描述】:

由于lack of stable Mongo drivers on Node,我正在评估 RethinkDB 作为 Mongo 的替代品。我已经阅读了http://www.rethinkdb.com/api/javascript/get_all/ 的文档,并且有一个非常简单的问题:如何通过键值对获取文档?

get() 的例子只讨论索引。我对索引不感兴趣,而是对其他字段感兴趣。例如,我希望能够做到:

.get({someField:SomeValue}) 

... 与我在 Mongo 上使用 collection.find() 的方式大致相同。但这似乎不可能。我究竟做错了什么?以这种方式获取文档不被视为获取吗?

我应该改用.filter() 吗?

【问题讨论】:

  • 不知道为什么你把它标记为 MongoDB,它是关于从 rethinkdb 获取东西
  • 再次,我不确定为什么您认为 MOngoDB 标签上的任何人都会知道?
  • 我不认为反对意见来自他们,我认为反对意见是您提出了一个非常基础的问题,显然其他人认为该问题非常基础,以至于您没有费心去研究。匿名投票的众多缺点之一。我的 cmets 上的赞成票早在反对票之前就已经存在了

标签: javascript node.js rethinkdb


【解决方案1】:

看起来Rethink's .filter 与 Mongo 的 find() 相当。

【讨论】:

  • 这是正确的。 RethinkDB 中的get 保留用于使用索引访问文档。 filter 用于线性扫描,这就是您在这里所做的。
  • 不知道我是如何在 2018 年来到这里的,但是 .filter 将被禁止,除非链接在 getAll 或任何会显着减少选择大小的基于索引的查询之后,因为 @ 987654327@ 针对选择中的每个文档进行评估。 @Masatoshi 的答案是 方式:创建简单、复合或任意索引,并在这些索引上进行查询。
  • @StockOverflaw 如果您理解它,您是否要编辑该答案以使其更清晰?我不太懂 Masatoshi 的英语。
  • Err... 我不确定我能否更清楚地了解 Masatoshi,我的意思是我不明白:他的帖子中有什么困扰您?
  • 正是你所需要的:这个Medium post 解释了一点,而且——更有趣的是——显示了.filter.getAll 之间的基准(剧透:在作者的情况下它快了10 倍以上2 标准查询)。快乐阅读! ;)
【解决方案2】:

您也可以使用getAll(),但首先要为该字段创建索引:

r.db('test').table('testtable').indexCreate('someField')

然后您可以使用getAll() 获取结果流:

r.db('test').table('testtable').getAll('SomeValue', {index :'someField'});

这比filter() 快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多