Mongoid - замена первого элемента массива в поисках / соединениях в отношениях принадлежащих - PullRequest
0 голосов
/ 18 января 2019

Давайте предположим, что это простое соотношение:

class Thing
  belongs_to :user # Not embedded!
end

И это упрощенное агрегирование на Thing, где мы хотим получить пользовательский объект:

{ :$match => { ... } },
# Get user from belongs_to relation
{ :$lookup => {
        from: 'users',
        localField: 'user_id',
        foreignField: '_id',
        # Always has one element, because it's a belongs_to relation
        as: 'user'
      } },

В агрегации существует два способа замены поля первым элементом массива.

  1. С addFields и arrayElemAt:
  { :$addFields => { user: { :$arrayElemAt => ['$user', 0] } } }
  1. С unwind (предполагается, что один элемент в массиве):
  { :$unwind => { path: '$user' } }

Вопрос: Я предпочитаю unwind, так как он выглядит чище, но видел, как люди часто используют первый подход. Это быстрее или «лучшая практика»?

...