2017-05-18 15 views
1

マイマングーススキーマをマングースする:解析JSONスキーマ

const BillSchema = new Schema({ 
    fromDate: { type: Date, default: Date.now }, 
    toDate: { type: Date, default: Date.now }, 
    phoneNumber: { type: String }, 
    created: { type: Date}, 
    user: { type: Schema.ObjectId, ref: 'User' }, 
    billDetail: [{ type: Schema.Types.ObjectId, ref: 'BillDetail' }] 
}); 
const BilldetailSchema = new Schema({ 
    amount: { type: Number }, 
    item: { type: Schema.ObjectId, ref: 'Item' }, 
    created: { type: Date, default: Date.now }, 
    user: { type: Schema.ObjectId, ref: 'User' } 
}); 
const ItemSchema = new Schema({ 
    name: { type: String}, 
    code: { type: String}, 
    amount: { type: Number }, 
    created: { type: Date, default: Date.now }, 
    user: { type: Schema.ObjectId, ref: 'User' } 
}); 

私のJSONは、私は法案の対象に上記のJSON文字列を解析することができますどのようにクライアント

{ billDetail: [ { item: [Object], amount: 1, rentalPrice: 11, rentalDays: 1 } ], 
    code: '000001', 
    customerName: 'steve', 
    phoneNumber: '959494949', 
    fromDate: '2017-05-07T17:00:00.000Z', 
    toDate: '2017-05-18T17:00:00.000Z' } 

から入手?私はこのコードを使用しよう:

let bill = new Bill(req.body); 

が、それは働いていないが、それだけでbilldetails法案を返しますが、ないです。

答えて

1

billDetailは、オブジェクトではなくIDの配列である必要があります。

まず、請求書の詳細を挿入し、IDを取得して新しいbillDetailアレイにプッシュすることができます。

BillDetail.insertMany(req.body.billDetail) 
    .then(function(billDetails) { 
     const billDetail = billDetails.map(billDetail => billDetail._id); 
     const billData = Object.assign({}, req.body, { billDetail }); 
     const bill = new Bill(billData); 
    }) 
    .catch(function(err) { 
     // error handling here 
    }); 
+0

それが働いている:私はクライアントからオブジェクトを送信するときDは、そんなにありがとう、そして、何項目については、私はすでにそれを作成しているので、私はちょうど、billDetailに_idをプッシュする必要がありますか? –

+0

'item'はIDでなければなりません。クライアントから渡すと簡単です –