获取 table 中没有字段的所有记录

Get all records in table without field

我在 RethinkDB 中有一个 table,我想在其中检索未设置字段 single 的所有记录。因为没有强制架构,一些存储的文档不遵循完全相同的结构。

table中的示例数据:

{
  "id": "1",
  "age": 27,
  "sex": "female",
  "single": true
},
{
  "id": "2",
  "sex": "female",
  "age": 40
},
{
  "id": "3",
  "age": 45,
  "sex": "male",
  "single": false
},
{
  "id": "4",
  "sex": "male",
  "age": 16
}

我需要编写一个 ReQL 查询来检索记录 2 和 4。如有任何帮助,我们将不胜感激。

尝试这样的事情

var data = [{
  "id": "1",
  "age": 27,
  "sex": "female",
  "single": true
},
{
  "id": "2",
  "sex": "female",
  "age": 40
},
{
  "id": "3",
  "age": 45,
  "sex": "male",
  "single": false
},
{
  "id": "4",
  "sex": "male",
  "age": 16
}];


var filtered = data.filter(function(elem){return typeof(elem.single) !== 'undefined';}));

如果您想要本机解决方案,这里是一个普通的非索引示例:

var result = [];
original.forEach(value) {
  if(value.single != null) {
    result.push(value);
  }
}

对于 mongodb,您可以在此处阅读有关查询和预测的信息:http://docs.mongodb.org/manual/reference/operator/query/

这就是您如何检索没有字段 single 或字段 singlenull.

的所有文档
r.table('data').filter(function(doc) {
    return doc.hasFields('single').not();
}).run().then(...).error(...)

如果您只想要未定义的字段:

r.table('data').filter(function(doc) {
     return doc('single').ne(null);
}).run().then(...).error(...)

这是有效的,因为如果 single 不是键,过滤器将返回错误,文档将被跳过。

文档:

如果您有大量数据,您可能也想使用索引。