#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"
}}]