2016-12-13 109 views
0

在貓鼬,目前我得到2架構第一個是產品的細節,第二個是在單獨的文件貓鼬填入回空

庫存兩個模式都

產品詳情架構

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var productDetailSchema = new Schema({ 
    ProductID:{type:String,unique:true, require:true}, 
    ProductName:{type:String, require:true}, 
    Spec:String, 
    Price:String, 
    Unit:String, 
    OwnBrand:Boolean, 
    Inventory:{ type: Schema.Types.ObjectId, ref: 'inventoryModel'} 
}, {collection:'products'}); 


module.exports = mongoose.model('productDetailModel', productDetailSchema) 

庫存模式

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var inventorySchema = new Schema({ 
    product:{ type: Schema.Types.ObjectId, ref: 'productDetailModel' }, 
    stockLevel:Number 
}, {collection:'inventory'}); 

module.exports = mongoose.model('inventoryModel', inventorySchema) 

在這種情況下,我想將庫存stockLevel放入productDetail。像這樣

{ 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
    Inventory: 20 
} 

所以我嘗試使用貓鼬填入方法

productDetail.findOne({ProductID:'P701'}).populate('Inventory').exec(function(err, doc){ 
    if(err){ 
     console.log(err) 
    }else{ 
     console.log(doc) 
    } 
}) 

這是我在「Inventory收集」

{ 
    "_id" : ObjectId("584f663d95dfa29bad337572"), 
    "ProductID": "P701", 
    "StockLevel": "20" 
} 

和所數據「ProductDetail Collection」中的數據

{ 
    _id : ObjectId("584a3cea027c1f62da941acf"), 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
} 

由於某些原因,沒有顯示錯誤,但console.log(doc)仍未包含任何Inventory:stockLevel。我知道我做錯了什麼,但我不知道它在哪裏。什麼樣的關鍵概念我錯過了這個代碼的工作?預先感謝您

+0

你能說明你在'productDetailModel'中保存'inventoryModel' _id的具體方法嗎? –

+0

請問您是否在ProductId的productDetail:'P701'中發佈了內容?您好像在保存產品詳細信息時存儲無效的庫存refId。 –

回答

0

您的inventoryproductDetailModel應該是ObjectId,從這裏顯示的是一個數字(即20)。

{ 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
    Inventory: 20 
} 

這應該是這樣的:

Inventory : ObjectId('someId'); 

這就是爲什麼它沒有填充,因爲它無法找到在inventoryModelObjectId爲20。

編輯

productDetail文件沒有現場爲inventory。因此,它無法填充它。

{ 
    _id : ObjectId("584a3cea027c1f62da941acf"), 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
} 

應該有這樣的事情太:

inventory : ObjectId("584f663d95dfa29bad337572");//some `ObjectId` which corresponds to `inventoryModel` document. 

您需要創建庫存fieldproductDetail文檔保存一些庫存憑證的的ObjectId而保存它,或者可能是在更新它。

+0

嗨拉維我已經更新上面的問題的數據,是你需要什麼? – Xylops

+0

嗨Ravi這現在終於正常工作了!十分感謝你的幫助。 :D – Xylops

+0

我很高興,我可以幫忙。 –