2 일 후에 이것을 나타냅니다. 솔루션은 고유 할 수도 있지만 매핑과 관련된 사람들에게 도움이 될 것이라고 생각합니다. ES6은을 약속하고 이것들에서 파생 된 참조를 가진 몽구스 모델을 다루고 있습니다. ES6은을 약속하므로 솔루션에 대해 매우 자세히 설명했습니다.
I. 시나리오 :
1. PersonModel는 PhoneModel에서 수집 phone_ids 있습니다.
2. PhoneModel에는 country_id가 필요하며 country_code가 있습니다.
3. CountryModel에는 PhoneModel에 필요한 country._id 속성과 country_code가 있습니다.
II. 쉬운 부분은 : 여기, API 호출로가 내 REDUX 작업에서
는 국가 방법 및 전화 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);
});
});
},
.....
}
을 수행합니다. 전화 작업 ...
II
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);
});
});
});
},
....
}
. Dicey 파트 :
person 액션에는 필요한 작업을위한 seed 및 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);
}
})
})
},
....
}
, 문서의 모든 지나치게 단순화 실제 시나리오에서는 분명하지 않습니다. 희망이 사람들을 돕는다!