1
所以我遇到了一個奇怪的問題,一直讓我瘋狂。我有一個商店的模式,代表店面攜帶某些製造商的產品,我也有一個模式。 Store模式的其中一個屬性是由ObjectId引用的製造商對象的數組。MongoDB參考不保存(貓鼬)
基本上,我想要完成的是當創建一個新的Store文檔時,我想要遍歷所有現有的Manufacturer文檔,並將每個文檔的_id
屬性添加到Store文檔中的引用數組。
最奇怪的是,在將所有_id
推入陣列後,我在新創建的Store模型上調用.save()
方法後,打印出的調試結果顯示結果完全保存了我想要的結果。但是,當我打電話來從我的數據庫中提取記錄時,製造商陣列完全是空的,並且沒有任何ObjectId被引用填充。
我不知道在哪裏,從這裏走,任何人可以幫助?
感謝
Schema定義:
var Schema = mongoose.Schema;
//create a schema for database
var storeSchema = new Schema({
"number": String,
"state": String,
"zip": String,
"city": String,
"street": String,
"manufacturers": [{
"type": mongoose.Schema.Types.Mixed,
"ref": "Manufacturer"
}]
});
var manufacturerSchema = new Schema({
"name": String,
"country": String,
"products": [{
"type": mongoose.Schema.Types.ObjectId,
"ref": "Product"
}]
});
var Product = mongoose.model("Product", productSchema);
var Manufac = mongoose.model("Manufacturer", manufacturerSchema);
創建一個存儲文件:
app.put("/api/v1.0/stores", function(req, res){
console.log("PUT request received at /stores.");
if(Object.keys(req.body).length < 5){
//not enough parameters
console.log("Not enough parameters were supplied.");
res.sendStatus(400);
}
//create a new database product document and save to database
var savedID;
var params = req.body;
var tmpStore = new Store({
"number": params.number,
"state": params.state,
"zip": params.zip,
"city": params.city,
"street": params.street
});
//find all manufacturers
Manufac.find({}, function(err, result){
result.forEach(function(value){
tmpStore.manufacturers.push(value._id);
});
});
tmpStore.save(function(err, result){
if(err) {
console.log("Error PUTing store!"); return;
}
console.log("Saved successfully: " + result);
});
res.sendStatus(200);
});
輸出:
從捲曲App listening on port 8080.
PUT request received at /stores.
Saved successfully: { __v: 0,
number: '1',
state: 'OR',
zip: '97333',
city: 'Corvallis',
street: '1680 Washington St.',
_id: 578df6a679e28aea6b84bec8,
manufacturers:
[ 578dae80a8f8ec3266a5d956,
578dd1918caa17b467b7caee,
578dd19f8caa17b467b7caef,
578dd1bd8caa17b467b7caf0 ] }
JSON GET
{
"_id": "578df6a679e28aea6b84bec8",
"number": "1",
"state": "OR",
"zip": "97333",
"city": "Corvallis",
"street": "1680 Washington St.",
"__v": 0,
"manufacturers": []
}
服務器端的GET請求代碼:
app.get("/api/v1.0/stores", function(req, res) {
console.log("Get received at /stores");
Store
.find({})
.populate("manufacturers")
.exec(function(err, result){
if(err){
console.log("Error fetching stores!"); return;
}
res.json(result);
});
});
謝謝!我甚至沒有考慮過''save()''函數將會擊敗''find()''調用。 –