2016-07-29 3 views
0

내가 몽구스 채우기 기능을 사용하려고하지만 응답 내가 하늘의 배열을 얻고 반환 채우는, 내가 본 여러 게시물.몽구스는 빈 배열

var mongoose = require ('mongoose');

var PackageSchema = new mongoose.Schema({ 
    merchant_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Merchant' }, 
    name: String, 
    original_price: Number, 
    discounted_price: Number 
}); 

module.exports = mongoose.model('Package', PackageSchema); 

그리고 이것은 내가 언급 한 모델입니다. 패키지 모델 및 판매자 모델의 데이터는 잘 저장됩니다.

{ 
    "_id": "579b3b2dc2e8d61c0ecd2731", 
    "packages": [] 
} 

사람이 나에게 도와 줄 수

: 나는 기능을 채울 사용하여 쿼리 할 경우

Merchant document

Package document

는하지만 빈 문자열

Merchant 
.findById(req.params.id, 'packages') 
.populate('packages') 
.exec(function (err, merchant) { 
    if (err) 
     next(err); 
    else 
     res.status(200).json(merchant); 
}); 

출력을 반환하고

업데이트 :

정말 이상한 일이 있습니다. merchant_id으로 패키지 문서를 채우려 고 시도하면 작동하지만 다른 방법으로는 작동하지 않습니다.

Package 
    .find() 
    .populate('merchant_id') 
    .exec(function (err, packages) { 
     if(err) 
      next(err); 
     else 
      res.status(200).json(packages); 
    }); 

는 출력 :

[ 
    { 
    "_id": "579b3b51c2e8d61c0ecd2732", 
    "name": "Hair + Nails", 
    "original_price": 600, 
    "discounted_price": 400, 
    "merchant_id": { 
     "_id": "579b3b2dc2e8d61c0ecd2731", 
     "updated_at": "2016-07-29T11:17:37.474Z", 
     "created_at": "2016-07-29T11:17:01.216Z", 
     "name": "VLCC", 
     "logo_image": "http://vlccwellness.com/India/wp-content/uploads/2015/09/logo1.png?", 
     "cover_image": "http://image3.mouthshut.com/images/imagesp/925053993s.jpg?", 
     "__v": 1, 
     "tags": [], 
     "packages": [ 
     "579b3b51c2e8d61c0ecd2732" 
     ], 
     "work_hours": { 
     "opening_time": 1000, 
     "closing_time": 2100, 
     "holiday": "Sunday" 
     }, 
     "information": { 
     "description": "Lorem Ipsum", 
     "gender": "Men", 
     "services": [ 
      "Hair" 
     ], 
+0

몽구스의 버전은 무엇입니까? –

답변

1

사용 유형은 MerchantSchema에 $ 유형의 insted.

var MerchantSchema = new mongoose.Schema({ 
    packages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Package'}] 
}, 
{ 
    typeKey: '$type', 
    timestamps: { createdAt: 'created_at', updatedAt: 'updated_at'} 
}); 

module.exports = mongoose.model('Merchant', MerchantSchema); 

은 상인 문서에서 패키지에 대한 ObjectId가의 배열이 확인합니다.

0

당신이 findBbyId에서 두 번째 매개 변수를 제거하여 시도 할 수

Merchant 
.findById(req.params.id) 
.populate('packages') 
.exec(function (err, merchant) { 
    if (err) 
     next(err); 
    else 
     res.status(200).json(merchant); 
}); 
+0

여전히 빈 배열을 얻으려고 시도했습니다. – Parichit

0

귀하의 Schema에있는 귀하의 packages 필드가 배열이기 때문에 배열로도 채워야합니다. Package이 패키지 모델의 인스턴스 wher

.populate([ 
    {path:'packages', model:Package} 
]) 

을보십시오.

0

판매자 스키마의 패키지 배열에 string 유형의 ObjectId (number가 아님)가 포함되어 있는지 확인하십시오. 이것을 다음과 같이 지정할 수 있습니다 :

merchant.packages.map(r => { r._id = r._id + ''; });