在Node.js中使用findAndModify时出错
我很难使用在Node.js中使用findAndModify时出错,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我很难使用查找和修改。以下是我的代码和错误:- var userSchema = new Schema({ incr: Number, practicename: String, basicinformation: [ { recordno: String, firstname: String, middlename: String, lastname: Str
查找和修改。以下是我的代码和错误:-
var userSchema = new Schema({
incr: Number,
practicename: String,
basicinformation: [
{
recordno: String,
firstname: String,
middlename: String,
lastname: String,
gender: String,
dateofbirth: Date,
dateofdeath: Date,
socialsecurityno: String,
status: String,
updateddate: Date,
updatedby: String
}
],
userSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
return this.collection.findAndModify(query, sort, doc, options, callback);
}
库/控制器
var query = {
update: { $inc: { incr: 1 } },
upsert: true
};
User.findAndModify(query, function (err, users) {
if (err) return res.send(500)
if (!err) console.log(users)
});
错误:-
Error: Illegal sort clause, must be of the form [['field1', '(ascending|descendi
ng)'], ['field2', '(ascending|descending)']]
at Object.exports.formattedOrderClause (D:\Projects\project1\node_modules\mongoose\node_modules\mongodb\lib\mongodb\utils.js:41:1
1)
at Collection.findAndModify (D:\Projects\project1
首先,去掉这段代码,因为您不需要它,实际上您正在定义一个“静态”签名,您甚至没有使用它:
userSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
return this.collection.findAndModify(query, sort, doc, options, callback);
}
您的用户
模型应该有如下声明:
var User = mongoose.model( "User", userSchema );
现在让我们看一下mongoose方法在长格式中的用法:
User.findOneAndUpdate(
{ _id: userid }, // this is what "query" means
{ "$inc": { "incr": 1 } }, // this is what "update" means
{ "upsert": true }, // this is what "options" means
function(err,user) {
您试图使用“本机”收集方法,而不是使用Mongoose已经存在的方法。这还显示了需要传递给此方法的正确参数,这些参数将在提供的文档链接中进一步解释
另请参见.findAndModify()方法的基本变体和其他方法。首先,删除此代码,因为您不需要它,实际上您正在定义一个您甚至没有使用的“静态”签名:
userSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
return this.collection.findAndModify(query, sort, doc, options, callback);
}
您的用户
模型应该有如下声明:
var User = mongoose.model( "User", userSchema );
现在让我们看一下mongoose方法在长格式中的用法:
User.findOneAndUpdate(
{ _id: userid }, // this is what "query" means
{ "$inc": { "incr": 1 } }, // this is what "update" means
{ "upsert": true }, // this is what "options" means
function(err,user) {
您试图使用“本机”收集方法,而不是使用Mongoose已经存在的方法。这还显示了需要传递给此方法的正确参数,这些参数将在提供的文档链接中进一步解释
另请参见.findAndModify()方法的基本变体和其他方法。您可以尝试mongoose方法
Model.findByIdAndUpdate( id, { $set: {name: 'xyz'}} , { new:true}, function(err,result) {
if ( err ) {
console.warn(err);
} else {
console.log(result);
}
});
选项new:true
返回更新的文档,否则旧的未更新文档您可以尝试mongoose方法
Model.findByIdAndUpdate( id, { $set: {name: 'xyz'}} , { new:true}, function(err,result) {
if ( err ) {
console.warn(err);
} else {
console.log(result);
}
});
选项new:true
返回已更新的文档,否则将返回未更新的旧文档您是否意识到您已更改了此方法的默认签名?您不需要像以前那样声明静态
。使用默认方法,并再次查看文档,因为您的参数是错误的。当我在没有统计信息的情况下直接使用它时,我会得到TypeError:-TypeError:Object function model(doc,fields,skipId){if(!(this instanceof model))返回新模型(doc,fields,skipId);model.call(this,doc,fields,skipId);}没有方法“findAndModify”
您知道您已经更改了此方法的默认签名,所以您没有更改吗?您不需要像以前那样声明静态
。使用默认方法,并再次查看文档,因为您的参数是错误的。当我在没有统计信息的情况下直接使用它时,我会得到TypeError:-TypeError:Object function model(doc,fields,skipId){if(!(this instanceof model))返回新模型(doc,fields,skipId);model.call(this,doc,fields,skipId);}没有方法“findAndModify”
当我运行上述代码时,记录不会递增…我可以在我的CMD中看到POST/api/users/create 500 10ms-21b
@在我的示例中,Anupuserid
是您需要传入的内容。您是否已将其强制转换为对象ID
?如果您将此作为POST数据的一部分获取,则需要。默认情况下,回调中的用户
是修改过的文档。上面的代码可以工作,但当我签入数据库时,值不会增加……在控制台中,我得到这个{u id:538c43bf7b412a14637605ec,userrecordno:13}
@Anup您没有阅读上面的注释。您需要强制转换到ObjectId。它不“工作”,因为您正在将和ObjectId与字符串进行比较。感谢所有的帮助…我刚刚重新启动了Robomongo…它工作得非常好。。。!当我运行上面的代码时,记录不会增加…我可以在我的CMD中看到POST/api/users/create 500 10ms-21b
@在我的示例中,Anupuserid
是您需要传入的内容。您是否已将其强制转换为对象ID
?如果您将此作为POST数据的一部分获取,则需要。默认情况下,回调中的用户
是修改过的文档。上面的代码可以工作,但当我签入数据库时,值不会增加……在控制台中,我得到这个{u id:538c43bf7b412a14637605ec,userrecordno:13}
@Anup您没有阅读上面的注释。您需要强制转换到ObjectId。它不“工作”,因为您正在将和ObjectId与字符串进行比较。感谢所有的帮助…我刚刚重新启动了Robomongo…它工作得非常好。。。!