Фильтрация документов по значению атрибута внутри массива объектов - PullRequest
0 голосов
/ 07 июня 2018

RethinkDB новичок здесь, и я не могу понять это.

Допустим, у меня есть таблица с именем mydata с документами, которые имеют следующую базовую структуру:

{
    "SomeAttirbute": "SomeValue",
    "team": [
        {
            "name":  "john" ,
            "other": "stuff",
        } ,
        {
            "name":  "jane" ,
            "other": "junk",
        }
    ] ,
    ...
}

Как получить все документы в таблице mydata, которые имеют john для значения атрибута name для любого из элементов в массиве team?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Я думаю, это то, что вы ищете:

r.db(insert_database_name).table("mydata").filter(
    lambda doc: doc["team"]["name"].contains("john")
).run(con)

или:

r.db(insert_database_name).table("mydata").filter(
    r.row["team"]["name"].contains("john")
).run(con)
0 голосов
/ 07 июня 2018

Это довольно просто и требует простого выражения ReQL.В JavaScript это будет примерно так:

const name = 'john';

...

r.db('q50732045')
  .table('mydata')
  // The predicate below can be literally read as:
  //     a document whose `team` property is a sequence
  //     that contains any element with a property `name`
  //     that equals the given name
  .filter(doc => doc('team').contains(member => member('name').eq(name)))
  // No need to invoke the run method in Data Explorer
  ;

Я верю, что это можно легко переписать на Python.

...