Как отделить элементы массива по отдельности в rethinkdb?

У меня есть такие документы:

{
   id:1,
  "A": [
    {
      "C": "abc",
      "D": [{X:"test"},{X:"test2"}]
    },
    {
      "C": "fg",
      "D":["X1"]
    }
  ]
}

Как получить все идентификаторы документа, чей тег соответствует A-> D -> X, имеет значение «тест». Я могу использовать concatMap(), но когда я его использую, я не могу получить поле «id», а также не могу использовать его внутри map, есть ли какие-либо аналогичные функции, такие как $unwind, в структуре агрегации Mongodb? Аналогично: запрос массива вложенных объектов

[Исходный вопрос]

{
id:2,
tags[{a:3,b:4},..]
}

person Prakash Thapa    schedule 14.05.2014    source источник


Ответы (1)


Ваш исходный вопрос имел этот объект:

{ id: 2,
  tags: [ { a: 3, b: 4 }, ... ] }

Вы можете создать предикат, который находит нужные документы и передает их filter.

r.table(...).filter(r.row('tags')('a').contains(3))('id')

В этом случае ('a') часть запроса при применении к массиву возвращает массив a полей каждого объекта в этом массиве, если он есть.

Ваш отредактированный вопрос имеет более сложный объект, но принцип тот же:

r.table(...).filter(
   r.row('A')('D').concatMap(function(x){return x})('X').contains("test")
)('id')
person AtnNn    schedule 14.05.2014
comment
Спасибо за ответ, я ожидал чего-то другого, поэтому редактирую свой вопрос. Мне нужно очень глубоко проникнуть внутрь объекта и массива, чтобы проверить, существует ли он или нет, а затем, наконец, я должен вернуть элемент первого уровня. - person Prakash Thapa; 15.05.2014