Совокупный этап поиска $перезаписывает данные

#mongodb #aggregation-framework #lookup #aggregation

Вопрос:

Как я могу выполнить поиск, не перезаписывая существующие данные.

Я воссоздал ситуацию на игровой площадке mopngodb: пример игровой площадки mongo db

Проблема в том, что мне нужно найти события и все идентификаторы объектов (вложенные события, теги).

Но проблема начинается при первом поиске вложенных событий. Мне нужно, чтобы все данные поиска находились в одном и том же месте, например, идентификатор для поиска. Но остальная часть данных из события исчезла, остались только подэвенции.

Есть какие-нибудь идеи?

Ответ №1:

поскольку вы даете выходное имя поиска, совпадающее с существующим полем, оно перезаписывает существующие данные, если вы даете новое имя, все данные сохраняются.

например, ниже агрегация содержит сведения об основных событиях и дополнительных событиях, при необходимости мы можем использовать этапы проекта для размещения дополнительных событий в разделе основное событие:

 [{$match: {
  type: "EVENT"
}}, {$lookup: {
  from: "events",
  localField: "markedItemID",
  foreignField: "_id",
  as: "marked_event"
}}, {$unwind: {
  path: "$marked_event"
}}, {$lookup: {
  from: "events",
  localField: "marked_event.baseData.subEvents",
  foreignField: "_id",
  as: "marked_subEvents"
}}]
 

https://mongoplayground.net/p/dlxqiK1PKdH