다중 입력 - mongoosejs
예를 들어 모형에 이중 참조가 있는 단순한 쿼리입니다.
스키마/모델
var OrderSchema = new Schema({
user: {
type : Schema.Types.ObjectId,
ref : 'User',
required: true
},
meal: {
type : Schema.Types.ObjectId,
ref : 'Meal',
required: true
},
});
var OrderModel = db.model('Order', OrderSchema);
쿼리
OrderModel.find()
.populate('user') // works
.populate('meal') // dont works
.exec(function (err, results) {
// callback
});
제가 이미 해봤는데
.populate('user meal')
.populate(['user', 'meal'])
사실 인구 중 오직 한 명만이 효과가 있다.
그럼, 어떻게 두 개체군이 작동할까요?
다음 구문을 이미 올바르게 사용하고 있습니다.
OrderModel.find()
.populate('user')
.populate('meal')
.exec(function (err, results) {
// callback
});
아마도meal
주문의 ObjectId가 에 없습니다.Meals
콜렉션?
갱신:
이 솔루션은 Mongoose 버전 3.x에서는 그대로입니다.
http://mongoosejs.com/docs/3.8.x/docs/populate.html
그러나 >= 4.x 버전의 Mongoose에 대해서는 더 이상 문서화되어 있지 않기 때문에 @Johnny의 답변이 있습니다.현재로선 HK만이 유효합니다.
오리지널 투고
Mongoose > = 3.6을 사용하는 경우 공백으로 구분된 경로 이름 문자열을 전달하여 다음을 채울 수 있습니다.
OrderModel.find()
.populate('user meal')
.exec(function (err, results) {
// callback
});
http://mongoosejs.com/docs/populate.html
이것은 이미 해결되었을지도 모릅니다만, Mongodb > 3.6의 복수 인구에 대한 저의 견해는 다음과 같습니다.
OrderModel.find().populate([{
path: 'user',
model: 'User'
}, {
path: 'meal',
model: 'Meal'
}]).exec(function(err, order) {
if(err) throw err;
if(order) {
// execute on order
console.log(order.user.username); // prints user's username
console.log(order.meal.value); // you get the idea
}
});
다른 방법도 있겠지만, 초보자(나처럼)에게는 매우 읽기 쉬운 코드가 됩니다.
내 생각에 가장 좋은 솔루션은 동일한 수준에서 여러 개의 외부 필드를 채울 때 배열입니다.내 코드에 따르면 여러 레벨의 모집단이 있습니다.
const patients = await Patient.find({})
.populate([{
path: 'files',
populate: {
path: 'authorizations',
model: 'Authorization'
},
populate: {
path: 'claims',
model: 'Claim',
options: {
sort: { startDate: 1 }
}
}
}, {
path: 'policies',
model: 'Policy',
populate: {
path: 'vobs',
populate: [{
path: 'benefits'
}, {
path: 'eligibility',
model: 'Eligibility'
}]
}
}]);
보시다시피 문서의 여러 필드에 입력이 필요한 경우 배열에 입력 키를 넣고 개체 배열을 제공했습니다. 개체마다 경로가 다릅니다.가장 견고하고 간결한 방법이라고 생각합니다.
사용할 수 있습니다.array
구문:
let results = await OrderModel.find().populate(['user', 'meal']);
각 채우기에서 원하는 속성을 선택할 수도 있습니다.
let results = await OrderModel.find().populate([{path: 'user', select: 'firstname'}, {path: 'meal', select: 'name'}]);
최신 mongoosev5.9.15
에는 입력 필드의 배열을 취득할 수 있는 기능이 있기 때문에 다음과 같이 할 수 있습니다.
.populate([ 'field1', 'field2' ])
다음 작업을 수행할 수 있습니다.
OrderModel.find()
.populate('user')
.populate('meal')
.exec(function (err, results) {
// callback
});
또는 어레이 옵션을 사용하여
OrderModel.find()
.populate([
{
path: "path1",
select: "field",
model: Model1
},
{
path: "path2",
select: "field2",
model: Model2
}
])
.exec(function (err, results) {
// callback
});
모델 파일에서 다음과 같은 작업을 수행합니다.
doctorid:{
type:Schema.Types.ObjectId, ref:'doctor'
},
clinicid:{
type:Schema.Types.ObjectId, ref:'baseClinic'
}
연산자를 추가하기 위한 js 파일에서 다음과 같은 것을 사용합니다.
const clinicObj = await BaseClinic.findOne({clinicId:req.body.clinicid})
const doctorObj = await Doctor.findOne({ doctorId : req.body.doctorid}) ;
**and add data as:-**
const newOperator = new Operator({
clinicid:clinicObj._id,
doctorid: doctorObj._id
});
이제, 채우는 동안
apiRoutes.post("/operator-by-id", async (req, res) => {
const id = req.body.id;
const isExist = await Operator.find({ _id: id }).populate(['doctorid','clinicid'])
if (isExist.length > 0) {
res.send(isExist)
} else {
res.send("No operator found");
}
});
같은 문제를 안고 있지만 populate에 없는 나의 실수는 Model에 오류가 있다.
이렇게 하면
수정되어 있지 않다
user: {
type: [Schema.Types.ObjectId],
ref: 'User'
}
맞아요.
user: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
이렇게 오브젝트 주위에 어레이를 배치해야 합니다.
컨트롤러/액션 함수의 객체 배열로 여러 필드를 채우려면 두 모델의 모델이 이미 게시 스키마에서 참조됩니다.
post.find({}).populate('user').populate('comments').exec(function (err,posts)
{
if(err)
{
console.log("error in post");
}
return res.render('home',{
h1:"home Page",
posts:posts,
});
});
내 생각에 당신은 공식 의사들을 방문할 수 있는 중첩된 사람들을 위해 노력하고 있는 것 같아요.
User.
findOne({ name: 'Val' }).
populate({
path: 'friends',
// Get friends of friends - populate the 'friends' array for every friend
populate: { path: 'friends' }
});
언급URL : https://stackoverflow.com/questions/12821596/multiple-populates-mongoosejs
'programing' 카테고리의 다른 글
PHP를 사용하여 JSON 파일을 업데이트/편집하는 방법 (0) | 2023.02.11 |
---|---|
tsconfig.json의 목적은 무엇입니까? (0) | 2023.02.11 |
다른 속성을 허용하는 TypeScript 인터페이스 (0) | 2023.02.11 |
ResponseStatusException에서 "trace" 필드를 삭제합니다. (0) | 2023.02.11 |
UI 그리드 열 헤더에서 정렬 메뉴 제거 (0) | 2023.02.11 |