マングースでは、現在2つのスキーマを取得しています。最初のスキーマは製品の詳細で、2番目のスキーマは在庫です。両方のスキーマは別々のファイルにあります。
ProductDetailスキーマ
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)
}
})
これは私の「インベントリコレクション」にあるデータです
{
"_id" : ObjectId("584f663d95dfa29bad337572"),
"ProductID": "P701",
"StockLevel": "20"
}
および「ProductDetailコレクション」のデータ
{
_id : ObjectId("584a3cea027c1f62da941acf"),
ProductID:'P701',
ProductName:'popcorn',
Spec:'Large Pack',
Price:'10.00',
Unit:'packs'
}
何らかの理由でエラーは表示されませんが、console.log(doc)にはまだInventory:stockLevelが含まれていません。私は何か間違ったことをしていることを知っていますが、それがどこにあるのかわかりません。このコードが機能するために、どのような重要な概念が欠けていますか?前もって感謝します
あなたのinventory
中にproductDetailModel
ある必要がありObjectId
ますが、ここに示したものからは、数(すなわち20)です。
{
ProductID:'P701',
ProductName:'popcorn',
Spec:'Large Pack',
Price:'10.00',
Unit:'packs'
Inventory: 20
}
これは次のようになります。
Inventory : ObjectId('someId');
にObjectId
20が見つからないため、データが入力されていないのはそのためinventoryModel
です。
編集
この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
を作成し、一部のインベントリドキュメントのObjectIdを保存中にproductDetail
ドキュメントに保存する必要があります。または、更新中に保存する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加