我有一個node.js API構建出來,更新一個子文檔。下面是後呼籲子文檔:如何解決貓鼬對象保存問題?
.put(function(req, res) {
member.findById(req.params.member_id, function(err, member) {
if (err)
res.send(err);
console.log("old: " + member);
member.address[req.params.address_id].address_type = req.body.address_type;
member.address[req.params.address_id].street1 = req.body.street1;
member.address[req.params.address_id].street2 = req.body.street2;
member.address[req.params.address_id].City = req.body.City;
member.address[req.params.address_id].State = req.body.State;
member.address[req.params.address_id].Zip = req.body.Zip;
member.address[req.params.address_id].Lat = req.body.Lat;
member.address[req.params.address_id].Lng = req.body.Lng;
console.log("new: " + member);
member.save(function(err) {
if (err)
res.send(err);
res.json({message:'Address Updated!!!'});
})
})
})
兩個的console.log線證明對象是在findById通話發現,然後通過數組會後更新。日誌證明內存中的對象實際上已更新。
但是,在調用.save()
調用時,我得到了成功消息,但是在mongodb中沒有任何更改。
我沒有得到任何錯誤,沒有警告,什麼都沒有。它說成功,但沒有改變。 如何解決問題?
這裏是我的地址型號:
var mongoose = require('mongoose'),
Schema = mongoose.Schema
var AddressSchema = Schema({
Address_type : String,
street1 : String,
street2 : String,
City : String,
State : String,
Zip : Number,
Lat : Number,
Lng : Number
});
module.exports = mongoose.model('Address', AddressSchema);
和這裏的父模型,成員:
var mongoose = require('mongoose'),
Schema = mongoose.Schema
var Address = require('./address');
var Award = require('./award');
var MemberSchema = Schema({
FName : String,
LName : String,
address: [Address.Schema],
phone : {
type : String,
number : String
},
email: String,
gender: String,
DOB: Date,
rank : {
level : String,
updated: { type: Date, default: Date.now }
},
Awards : {
personal : Boolean,
award : [Award.Schema],
granted: { type: Date, default: Date.now }
}
});
module.exports = mongoose.model('Member', MemberSchema);
完成。非常感謝。 – arcee123
'req.params.address_id'是一個ObjectId還是'address'元素的索引要更新? – JohnnyHK
FWIW,您的錯誤處理已關閉:如果發生錯誤,則調用'res.send(err)',但之後您的回調函數將繼續運行。在這種情況下,您需要從回調中返回:'if(err)return res.send(err)'。 – robertklep