Завершилось это через два дня. Решение может быть уникальным, но я думаю, что это будет полезно для всех, кто участвует в картографии ES6 обещает и имеет дело с монгольскими моделями, у которых есть ссылки, полученные из этих ES6 обещает, поэтому я довольно подробно рассказал о решении.
I. Сценарий:
1. PersonModel имеет коллекцию phone_ids из PhoneModel.
2. Для модели PhoneModel требуется country_id и имеет country_code.
3. Страна CountryModel имеет свойство country._id, которое требуется PhoneModel, и country_code.
II. Easy Часть:
В моем Redux действии, которые у меня есть, как API вызовы, здесь является Страны получить метод и Телефона Addnew метода.
a. страна действия ...
import {CountryRefModel} from '../../../models/_repo.models.api';
module.exports {
.....
// need country name too, Canada/US/Carribean Is. have same country_code
getIdByCountryCode: (countryName, countryCode) => {
return new Promise((resolve, reject) => {
CountryRefModel.findOne({name: countryName, country_code: countryCode },
{_id: 1}, (err, result) => {
if (err) {
console.log(`${CountryModel.modelName} getIdByCountryCode Error: ${err.message}`);
reject(err);
}
resolve(result);
});
});
},
.....
}
а. телефонные действия ...
import {PhoneModel} from '../../../models/_repo.models.api';
import * as refCountry from '../../_reference/country/country.reference.actions.api';
module.exports {
....
addNew: (phone) => {
return new Promise((resolve, reject) => {
refCountry.getIdByCountryCode(phone.country.name, phone.country.country_code)
// using then method as country action get method
// is already a promise
.then(returnValue => {
PhoneModel.create({
_id: phone.id,
country_id: returnValue,
type: phone.type,
isMain: phone.isMain ? phone.isMain : false,
area_code: phone.area_code,
prefix: phone.prefix,
suffix: phone.suffix,
vanity_number: phone.vanity_number ? phone.vanity_number : null
}, (err, result) => {
if (err) {
console.log(`${PersonModel.modelName} addNew Error: ${err.message}`);
reject(err);
}
resolve(result);
});
});
});
},
....
}
II. Dicey Part:
Действия человека имеют семена и addNew методы для чего мне нужно.
мне нужно карту через людей,
Карта через свои телефоны,
а. получите country_id для каждого телефона
b. добавить каждый телефон в телефонную коллекцию
c. передать соответствующее phone._id лицу
Добавить нового человека в коллекцию.
а. человек действие ....
Трудная часть, мне потребовалось некоторое время, чтобы выяснить, было семенем метода.
Вопросы для рассмотрения:
Назначение ваших отображения переменной.
С добавлением addNew телефона в дополнение к добавлению нового телефона в CountryModel, мне нужно только вызвать его метод addNew в сопоставлении.
Я затем вызвать метод Addnew с тем же модулем, с помощью module.exports.addNew»
import mongoose from 'mongoose';
import {PersonModel} from '../../../models/_repo.models.api';
import {addNew} from '../../_common/communication/phone.common.actions.api';
const data = require('../../../seed/_common/people/person.seed.api.js').getData();
function seedDatabase() {
PersonModel.find({}, (errFind, collection) => {
if (errFind) {
console.log(`${PersonModel.modelName} Seed Error: ${errFind.message}`);
}
if (collection.length === 0) {
const updatedPerson = data.map(person => {
person.id = mongoose.Types.ObjectId();
const phoneIds = [];
const updatePhones = person.phone_numbers.map(phone => {
phone.id = mongoose.Types.ObjectId();
phoneIds.push(phone.id);
return addNew(phone);
});
return module.exports.addNew(person, phoneIds);
});
});
// Just an example of taking the promises further
// return LocationModel.addNew(person.id);
}
});
}
module.exports = {
seed:() => seedDatabase(),
....
addNew: (person, phoneIds) => {
return new Promise((resolve, reject) => {
person.phone_ids = (phoneIds);
PersonModel.create({
prefix: person.prefix,
fName: person.fName,
mName: person.mName,
lName: person.lName,
suffix: person.suffix,
profDes: person.profDes,
gender: person.gender,
email: person.email,
phone_ids: person.phone_ids,
lang_key: person.lang_key
}, (err, result) => {
if (err) {
console.log(`${PersonModel.modelName} addNew Error: ${err.message}`)
reject(err);
} else {
resolve(result);
}
})
})
},
....
}
Как обычно, все в документации чрезмерно упрощенным и не в полной мере ясны в реальных сценариях. Надеюсь, это помогает людям!