使用猫鼬更新,不返回任何错误但也不更新
Updating with mongoose, not returning any errors but neither updating
我正在尝试使用猫鼬学习 CRUD。我只缺少更新部分。我做错了什么?
我的模型
var mongoose = require('mongoose');
var testSchema = new mongoose.Schema({
name: String,
number: Number
});
mongoose.model('TestData', testSchema);
我的路线
// get the models
var Test = mongoose.model('TestData');
参数
如果 link 将 'test'
作为 url 参数,它将查找对象是否存在于数据库中,否则 return 错误。
router.param('test', function(req, res, next, id){
var query = Test.findById(id);
query.exec(function(err, test){
if(err){ return next(err); }
if(!test){ return next(new Error('can\'t find test')); }
req.test = test;
return next();
});
});
通过 ID 获取
/* GET testdata/:id */
router.get('/testingdata/:test', function(req, res, next){
req.test.populate('test', function(err, test){
res.json(test);
});
});
删除
/* DELETE testdata/:id */
router.delete('/testingdata/:test', function(req, res, next){
req.test.remove('test', function(err, test){
console.log('removed');
res.json(test);
});
});
我的问题
现在我的问题来了,如果我尝试更新一个,我只是遗漏了一些东西。
/* PUT testdata/:id */
router.put('/testingdata/:test', function(req, res, next){
req.test.update('test',{$set: {name: 'new data'}} , function(err, test){
res.json(test);
});
});
我没有收到任何错误,但它既没有更新任何内容。它甚至 return 正在处理一些数据。
{
"ok": 0,
"n": 0,
"nModified": 0
}
尝试去掉不需要的第一个参数 (test
),因为 req.test
是 Test
模型的一个实例。
req.test.update({name: 'new data'} , function(err, test){
res.json(test); // test would be `1` if success
});
update
方法不会return对象,如果你想return对象那么使用save
:
req.test.name = 'new data';
req.test.save(function(err, test){
res.json(test);
});
您的问题在于,删除和更新方法都不适用于模型实例,但需要查询,例如
{_id:id}
您的更新语句不匹配任何内容,我敢打赌您的删除端点也不起作用。
如果你想在 req.test 上对实时模型实例进行操作,那么直接在测试上设置值并保存模型:
req.test.name= 'new data';
req.test.save(...
删除模型总是需要一个新的查询,因为您不能直接删除实例。
我正在尝试使用猫鼬学习 CRUD。我只缺少更新部分。我做错了什么?
我的模型
var mongoose = require('mongoose');
var testSchema = new mongoose.Schema({
name: String,
number: Number
});
mongoose.model('TestData', testSchema);
我的路线
// get the models
var Test = mongoose.model('TestData');
参数
如果 link 将 'test'
作为 url 参数,它将查找对象是否存在于数据库中,否则 return 错误。
router.param('test', function(req, res, next, id){
var query = Test.findById(id);
query.exec(function(err, test){
if(err){ return next(err); }
if(!test){ return next(new Error('can\'t find test')); }
req.test = test;
return next();
});
});
通过 ID 获取
/* GET testdata/:id */
router.get('/testingdata/:test', function(req, res, next){
req.test.populate('test', function(err, test){
res.json(test);
});
});
删除
/* DELETE testdata/:id */
router.delete('/testingdata/:test', function(req, res, next){
req.test.remove('test', function(err, test){
console.log('removed');
res.json(test);
});
});
我的问题
现在我的问题来了,如果我尝试更新一个,我只是遗漏了一些东西。
/* PUT testdata/:id */
router.put('/testingdata/:test', function(req, res, next){
req.test.update('test',{$set: {name: 'new data'}} , function(err, test){
res.json(test);
});
});
我没有收到任何错误,但它既没有更新任何内容。它甚至 return 正在处理一些数据。
{
"ok": 0,
"n": 0,
"nModified": 0
}
尝试去掉不需要的第一个参数 (test
),因为 req.test
是 Test
模型的一个实例。
req.test.update({name: 'new data'} , function(err, test){
res.json(test); // test would be `1` if success
});
update
方法不会return对象,如果你想return对象那么使用save
:
req.test.name = 'new data';
req.test.save(function(err, test){
res.json(test);
});
您的问题在于,删除和更新方法都不适用于模型实例,但需要查询,例如
{_id:id}
您的更新语句不匹配任何内容,我敢打赌您的删除端点也不起作用。
如果你想在 req.test 上对实时模型实例进行操作,那么直接在测试上设置值并保存模型:
req.test.name= 'new data';
req.test.save(...
删除模型总是需要一个新的查询,因为您不能直接删除实例。