Я борюсь с населением в мангусте. Предполагая, что у меня есть большой документ со многими вложенными объектами, которые не всегда получают Schemas или просто Type.Mixed.Как заполнить вложенные объекты асинхронно в мангусте?
схемы для этого документа будет что-то вроде этого:
{
token: String,
group: String,
connectionStatus: String,
activeQuestLine: String,
quests:
{
exposition: [
{
content: { type: mongoose.Schema.Types.ObjectId, ref: 'Quest' },
status: String,
trigger:
{
name: String,
param: mongoose.Schema.Types.Mixed
},
subQuests:
[
{
content: { type: mongoose.Schema.Types.ObjectId, ref: 'Quest' },
status: String,
trigger:
{
name: String,
param: mongoose.Schema.Types.Mixed
}
}
]
}
],
conflict: [
{
content: { type: mongoose.Schema.Types.ObjectId, ref: 'Quest' },
status: String
}
],
resolution: [
{
content: { type: mongoose.Schema.Types.ObjectId, ref: 'Quest' },
status: String
}
]
},
inventory:
{
maxSlots: Number,
slots: [
{
itemType: String,
content: mongoose.Schema.Types.Mixed,
empty: Boolean
}
]
}
};
Так что я «» findOne «» этот тип документа один раз, сохранить его, а затем при необходимости заполнить некоторые детали для моих конкретных случаев использования , Насколько я вижу, большинство вопросов к этой теме относятся к сохранению заполненного документа после его манипулирования, но я хочу сохранить документ как есть и просто передать (заполненные) данные в какую-то другую функцию.
Например, я просто хочу получить все «подпрограммы» определенного поиска свойства экспозиции. Там, где у них также могут быть свои «подкасты», да, должна быть рекурсивная схема, но пока это не главная проблема. Проблема заключается в том, что я хочу итерацию над ним, как это:
async.forEachSeries(
questInfo.subQuests,
function (subQuestInfo, eachCallback)
{
QuestManager.getQuest(subQuestInfo.content, function (subQuest)
{
if (!subQuest) throw 'SubQuest ' + subQuestInfo.content + ' not found';
subQuestInfo.content = subQuest;
eachCallback();
});
},
function (err)
{
if (err) throw err;
activeQuests.push(questInfo);
});
С questInfo извлекается из основного документа и передается в качестве аргумента в этой функциональности. Но в этой строке:
subQuestInfo.content = subQuest;
Значение «content» по-прежнему остается объектом ObjectId, поэтому предыдущее значение. Мое задание явно не влияет! Это своего рода ручная попытка населения, есть ли лучший способ решить эту проблему?
Спасибо за ваше время.
Спасибо за ваш ответ. На самом деле у меня нет quest.subQuests, это скорее GameClient.quests.exposition [0] .subQuests. Это гарантирует, что я буду иметь описательные данные квеста и расположение квестов и их отношений. – mrpool89
Добро пожаловать! Является ли gameclient схемой мангуста? – lipp
Да, это так. Это в основном тот, который я написал выше. – mrpool89