2016-11-20 4 views
1

У меня есть документ, который выглядит следующим образом:Inner присоединиться на родительский документ изнутри ребенка

{ 
    "id": "some guid", 
    "name": "Bob", 
    "following": [ 
     { 
      "id": "some_guid", 
      "priority": true 
     } 
    ] 
} 

Идея заключается в том, что пользователь может следовать другим пользователям.

Что бы я хотел сделать, для данного пользователя получить идентификаторы и имена всех пользователей, за которыми они следуют. Имя не сохраняется в "следующей" коллекции.

Если бы я использовал SQL, я буду делать что-то вроде этого:

SELECT u.following_id, u.priority, j.name FROM users INNER JOIN j on u.following_id = j.id.

Что такое эквивалент в DocumentDb SQL?

ответ

3

Эквивалент в DocumentDB состоит в том, чтобы выполнить две поездки в оба конца. Сначала выберите пользовательский документ, содержащий массив того, кто этот пользователь. Затем создайте большое предложение OR и используйте это, чтобы получить документы того, за кем они следуют.

В качестве альтернативы, вы можете захотеть сохранить отношения в другом направлении. Поэтому вместо сохранения того, кто один пользователь следует в этом документе пользователя, сохраните список followBy в каждом из последователей. Затем вы можете выполнить запрос ARRAY_CONTAINS в одном раунде.

Возможно, вам также стоит посмотреть на продукт аналитики потока Azure, поскольку он имеет возможности запросов к графику.

Смежные вопросы