Rethinkdb谓词函数'包含'表示多个值不起作用

时间:2016-01-27 04:52:55

标签: javascript rethinkdb rethinkdb-javascript

我有一个如下所示的数据模式:

{
  "datetime": "1453845345493",
  "someIds": ["id2000-4", "id1000-34"]
}

数组someIds可以包含许多不同的值。

使用以下查询基于一个ID进行过滤无问题,并返回大约400个结果。 (我还计划实现正确的索引,但现在正在测试一个更简单的情况。)

r.db("dbName").table("tableName")
  .filter(r.row("datetime").gt(1453845340493))
  .filter(function(someVal){
    return someVal("someIds").contains("id2000-4");
  })
  .count()

但是,当它应该返回上面的超集时,尝试遵循最后一个示例in the 'contains' documentation,它建议使用谓词函数来模拟'或'语句不返回任何内容:

r.db("dbName").table("tableName")
  .filter(r.row("datetime").gt(1453845340493))
  .filter(function(someVal){
    return r.expr(["id2000-4", "id1000-77"]).contains(someVal("someIds"));
  })
  .count()

据我所知,我已完全按照该页面上的说明操作,但它无效。我正在运行RethinkDB v2.2.3-1,并在数据资源管理器中运行它。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

该页面上的示例正在调用ul,而您的代码正在调用r.expr(ARRAY).contains(SINGLE_VAL)。如果要检查r.expr(ARRAY).contains(OTHER_ARRAY)是否包含数组中的任何元素,我会使用https://www.rethinkdb.com/api/javascript/set_intersection/。 (所以像someIds。)

如果你想用.filter(function(someVal) { return r.expr(ARRAY).setIntersection(someVal('someIds')).count().ne(0); })来做,你可以这样写:

contains
相关问题