在我发布这个问题之前,我已经在google上做了很多搜索,但仍然没有任何帮助。所以我的问题是,我想在查询之后更新我的数据库,之前已经创建了对象,但是每当我想要更新它时,都会出现一个错误,说我的对象没有方法保存。
TypeError: Object { session_key: '-----',
poll_id: '-----',
status: 'xxxxx',
_id: xxxx,
__v: 0 } has no method 'save'
at Promise.<anonymous> (/home/albert/gampangpoll/server.js:971:18)
at Promise.<anonymous> (/home/albert/gampangpoll/node_modules/mongoose/node_ modules/mpromise/lib/promise.js:177:8)
at Promise.emit (events.js:95:17)
at Promise.emit (/home/albert/gampangpoll/node_modules/mongoose/node_modules /mpromise/lib/promise.js:84:38)
at Promise.fulfill (/home/albert/gampangpoll/node_modules/mongoose/node_modu les/mpromise/lib/promise.js:97:20)
at /home/albert/gampangpoll/node_modules/mongoose/lib/query.js:1056:26
at model.Document.init (/home/albert/gampangpoll/node_modules/mongoose/lib/d ocument.js:254:11)
at completeMany (/home/albert/gampangpoll/node_modules/mongoose/lib/query.js :1054:12)
at Object.cb (/home/albert/gampangpoll/node_modules/mongoose/lib/query.js:10 20:11)
at Object._onImmediate (/home/albert/gampangpoll/node_modules/mongoose/node_ modules/mquery/lib/utils.js:137:16)
这是我的猫鼬模式:
var RoomSchema = new Schema ({
status : String,
session_key : String,
poll_id : String,
jml_peserta : Number
});
这里是代码产生错误的地方:
Room.find({'session_key': input_skey}, function(err, room){
room.jml_peserta += 1;
room.save();
我试图将对象名称从room更改为liveroom,以防万一它不区分大小写,但是,仍然没有任何变化。我也尝试另一种方式,几个小时的调试,但问题仍然存在。请帮帮我,非常感谢你。
答案 0 :(得分:1)
使用find
,回调的room
参数将是文档的数组,而不仅仅是一个。切换到使用findOne
代替:
Room.findOne({'session_key': input_skey}, function(err, room){
room.jml_peserta += 1;
room.save();
});
但是就像布雷克评论的那样,你应该使用原子update
代替这种类型的改变:
Room.update({'session_key': input_skey},
{$inc: {jml_peserta: 1}},
function(err, numAffected){ ... });
答案 1 :(得分:0)
find
为您提供了一系列文档。
如果您确定只有一个文档session_key
并且想要使用save
,则可以使用以下脚本。
Room.find({'session_key': input_skey}, function(err, room){
room.jml_peserta += 1;
room[0].save();
}
但是,您可以使用findOneAndUpdate
查找单个文档并进行更新。 findOneAndUpdate优于更新的优点是您可以使用该文档发送响应等。
Room.findOneAndUpdate({'session_key': input_skey},
{$inc: {jml_peserta: 1}},
function (err, room) {
//Your code
}
);
如果您只是不想要文档,可以使用update
Room.update({'session_key': input_skey},
{$inc: {jml_peserta: 1}},
function (err, numberOfUpdates) {
//Your code
}
);