Мне нужно вставить записи в две коллекции. Вторая коллекция хранит идентификатор записей первой коллекции. Это 1: м (fisrt: вторая) ситуация. Триггер является вторым сбором:Mongoose: вставьте одну коллекцию, опираясь на другую с обещаниями
- Если запись для второго сбора необходимо хранить
- проверить, если уже есть подходящая запись в первой коллекции
- если нет: сохраните один в первая коллекция
- магазин второй сборник
- сохранить идентификатор записи первой коллекции во второй коллекции
Следующий пример, похоже, выполняет эти шаги. Но у меня есть обещания только наполовину. Как это можно сделать более «обещанным» способом?
saveObjects(name: String, objects: Array<IObject>){
var promise = FirstModel.findOne({Name : name}).exec();
promise.then(function(res1){
if (!res1){
var la = new FirstModel();
la.Name = name;
la.save(function(err){
if (err) throw err;
})
}
}).error(function(err){
throw err;
})
objects.forEach(function(obj) {
FirstModel.findOne({Name : name},'_id',function(err, res2){
if (err) throw err;
var vo = new SecondModel();
vo.Name = name;
vo.FistID = res2._id;
vo.save(function(err){
if (err) throw err;
});
});
});
}
Но ссылка 'vo.FistID = res1._id;' к FirstModel, бросает anerror в приведенном выше примере, так как res1._id не в область в. then part. Вот почему я прочитал дальше FirstModel в этом месте. Есть лучший способ сделать это ? – MBushveld
res1 определяется во втором, затем(), поэтому он должен работать нормально. Мы передаем res1 от первого, затем() ко второму. Если вы получаете ошибку, вставьте его здесь, чтобы я мог видеть, что это такое. Если вы копируете/вставляете напрямую, вы должны знать, что я просто исправил незначительную синтаксическую ошибку, поэтому вам следует попробовать еще раз. – grimurd
Ошибка, которую я получаю: 'error TS2339: свойство '_id' не существует в типе '{}'. 'Кажется, это для меня, что res1 не знает во второй части. – MBushveld