在mongoose中,目前我有2个架构,第一个是产品详细信息,第二个是库存,两个架构都是单独的文件
ProductDetail Schema
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
}
因此我尝试使用mongoose populate方法
productDetail.findOne({ProductID:'P701'}).populate('Inventory').exec(function(err, doc){
if(err){
console.log(err)
}else{
console.log(doc)
}
})
这是我在"库存集合中的数据"
{
"_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 :(得分:0)
inventory
中的productDetailModel
应该是ObjectId
,您在此处显示的是一个数字(即20)。
{
ProductID:'P701',
ProductName:'popcorn',
Spec:'Large Pack',
Price:'10.00',
Unit:'packs'
Inventory: 20
}
这应该是这样的:
Inventory : ObjectId('someId');
这就是为什么它没有填充,因为它在ObjectId
中找不到inventoryModel
为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.
您需要创建广告资源field
并在productDetail
文档中保存某些广告资源文档,同时保存它,或者可能在更新时。