Ahm*_*ven 18 mongoose mongodb node.js
我有Mongoose和MongoDb的问题
非常有趣的是,只有Model.update工作,save永远不会工作,甚至不会发出回调.
猫鼬:4.4.5 MongoDB:3.0.8
快车道
var mongoose = require('mongoose');
mongoose.connect("mongodb://127.0.0.1:27017/db");
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function(callback) {
console.log("connection to db open")
});
var User = require("../models/user.js");
Run Code Online (Sandbox Code Playgroud)
用户模型
var user = new Schema({
uid: { type: Number, required: true, unique: true},
hwid: { type: String, default:""},
bol:{type:String,default:""}
});
Run Code Online (Sandbox Code Playgroud)
更新Enpoint
工作版本:Model.update()
User.update({_id: id}, {
uid: 5,
}, function(err, numberAffected, rawResponse) {
console.log(err);
})
Run Code Online (Sandbox Code Playgroud)
不工作版本,我必须解决这个问题:Object.save()
User.find({_id:id}, function(err,user){
if(err){
console.log(err);
}
if(!user){
console.log("No user");
}else{
user.uid = 5;
user.save(function(err,news){
console.log("Tried to save...");
});
}
console.log("At least worked");
})
Run Code Online (Sandbox Code Playgroud)
即使回调也没有解雇.连接成功打开.它永远不会调用回调.
var User = connection.model('User', schema)不起作用.Ahm*_*ven 22
我不打算删除这个问题,因为人们也可能会遇到这个问题.实际上问题与MongoDb或Mongoose无关.当您致电Object.save()责任链时如下:
- Schema.pre( "拯救")
- 将数据保存到dabe
- Schema.post( "拯救")
因此,如果您阻止pre("save")并且不调用next()处理程序,则无法保存文档.这是我的情况,我next()在if语句中忘记了调用,并试图找到错误超过3个小时.
user.pre("save", function(next) {
if(!this.trial){
//do your job here
next();
}
}
Run Code Online (Sandbox Code Playgroud)
何时this.trial == true,下一个处理程序将无法访问.
为了防止这样的错误,我们应该负责分支机构的覆盖,记者可以向我们展示未经测试的代码.你的问题也可能与此有关.如果您的文档应该保存,请务必致电next().
修正版
user.pre("save", function(next) {
if(!this.trial){
//do your job here
}
next();
}
Run Code Online (Sandbox Code Playgroud)
Abo*_*ian 11
我也有同样的问题。我的问题是关于更改db中的数组,然后当我尝试使用.save()时,它不了解我进行了任何更改,因此.save()无法正常工作。我只是在使用.save()之前使用markModified(),我的问题就解决了。
这是我的代码有问题:(不起作用)
club.members[index].name = new_name;
club.save();
Run Code Online (Sandbox Code Playgroud)
这是我解决的代码:(工作)
club.members[index].name = new_name;
club.markModified('members');
club.save();
Run Code Online (Sandbox Code Playgroud)
请享用!
小智 5
就像保罗说的。很可能您是在 'req.user' 对象上调用 save,该对象不是 Mongoose 对象。确保你正在做这样的事情:
//I am using your 'user' schema
var userModel = mongoose.model('User', user);
var User = mongoose.model('User');
var newUser = new User(req.user);
newUser.save(function(error, user){
//your code
}
Run Code Online (Sandbox Code Playgroud)
这听起来很疯狂..并且我一直在努力解决这个问题几个小时。看着这么多堆栈溢出的帖子..令人难以置信。
你知道那是什么吗?我没有在网址末尾指定数据库。
所以代替
"mongodb://127.0.0.1:27017/test"
Run Code Online (Sandbox Code Playgroud)
我有
"mongodb://127.0.0.1:27017
Run Code Online (Sandbox Code Playgroud)
我为此浪费了一整天。我真希望我能得到某种错误。保存记录总是返回确定。并在数据库日志中,我连接正常。但是我确实需要查看细节。是的,它正在连接到mongo实例,但没有连接到数据库本身。啊!
| 归档时间: |
|
| 查看次数: |
21127 次 |
| 最近记录: |