Есть ли способ создать проекцию без явного перечисления свойств документа?

У меня есть одна коллекция для пользователей, одна для пользовательских календарей (пользователи: календари имеют отношение 1:1, но не у всех пользователей есть календарь):

users: {"name":"John","role":admin [more fields]}
calendars: {"color":"blue",owner: "users/john"}

Я должен вернуть документ с:

{"name":"John","role":admin,[all fields from the users collection],calendar:cal}

Есть ли способ сделать это, не перечисляя свойства из пользовательского документа?

for cal in zcalendar
    for user in zuser filter user._id == cal.owner
return ...

1 ответ

Решение

Вы можете использовать функцию документа MERGE, например, так:

FOR cal IN zcalendar
    FOR user IN zuser
        FILTER user._id == cal.owner
        LET calDoc = {
            'calendar': cal
        }
        RETURN MERGE(user, calDoc)

Который возвращает эту структуру:

[
  {
    "_id": "...",
    "_rev": "...",
    "_key": "...",
    "name": "John",
    "role": "admin",
    "calendar": {
      "_id": "...",
      "_rev": "...",
      "_key": "...",
      "color": "blue",
      "owner": "..."
    }
  }
]
Другие вопросы по тегам