2

我有一个简单的 JSON 结构,例如

{'a' : 'value' , 'b': ['b1','b2','b3'] , c: 'value'} ,
{ 'a' : 'value' , 'b': ['b5','b6','b7'] , c: 'value'},
and so on . . .

我想知道如何过滤只有 b1 或 b2 的 json 数据。本文档 [1] 中不是很清楚。我尝试运行以下查询,但我很确定,这不是正确的方法。

r.db('mine').table('business')
  .filter([{'categories':'Clothing'}])

[1] http://rethinkdb.com/docs/nested-fields/ruby/

4

1 回答 1

3
  1. 如果您想要b属性中具有值为 的值的所有行b1,则可以使用该contains方法。

您使用该contains方法(使用 `filter 方法)来做到这一点:

r.db('mine')
 .tables('business')
 .filter(function (row) { return row('b').contains('b1'); })
 .run(conn)

在 Ruby 中,它看起来像这样:

r.db('test')
 .table('hello')
 .filter{ |row| row['b'].contains('b1') }
 .run(conn)

在 Python 中,它看起来像这样:

r.db('test')
 .table('hello')
 .filter(lambda row: row['b'].contains('b1'))
 .run(conn)
  1. b如果您希望属性中的所有行的值都为b1AND 的值为b2,则可以将contains方法与方法一起使用and

JavaScript

r.db('mine')
 .tables('business')
 .filter(function (row) { 
   return row('b').contains('b1').and(row('b').contains('b2')); 
 })
 .run(conn);

Python:

r.db('test')
  .table('hello')
  .filter(lambda row: 
     row['b'].contains('b1') & row['b'].contains('b2') 
   )
  .run(conn)
  1. 如果你想要一个数组的所有行只包含值'b1'或'b2',那么你可以使用丹尼尔的方式并将.setDifference方法与方法一起使用isEmpty

JavaScript

r.db('mine')
 .tables('business')
 .filter(function (row) { 
   return row('b').contains('b1').and(row('b').contains('b2')); 
 })
 .run(conn);

Python:

r.db('test')
  .table('hello')
  .filter(lambda row: 
     row['b'].contains('b1') & row['b'].contains('b2') 
   )
  .run(conn)
于 2015-04-13T18:06:36.013 回答