我很难使用findAndModify
。这是我的代码&错误: -
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);
}
LIB /控制器
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
答案 0 :(得分:2)
首先,摆脱这些代码,因为你不需要它,而你实际上是在定义一个"静态"您甚至不使用的签名:
userSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
return this.collection.findAndModify(query, sort, doc, options, callback);
}
您应该为User
模型声明如下:
var User = mongoose.model( "User", userSchema );
现在让我们以长篇形式查看mongoose方法.findOneAndUpdate()
的用法:
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) {
你试图使用" native"收集方法,而不是使用Mongoose已经存在的方法。此外,还显示了需要传递给此方法的正确参数,这些参数将在提供的文档链接中进一步说明。
另见.findByIdAndUpdate()
和其他方法,它们是.findAndModify()`方法的基本变体。
答案 1 :(得分:1)
您可以尝试使用mongoose findByIdAndUpdate方法
Model.findByIdAndUpdate( id, { $set: {name: 'xyz'}} , { new:true}, function(err,result) {
if ( err ) {
console.warn(err);
} else {
console.log(result);
}
});
选项new:true
返回更新的文档,否则返回旧的未更新文档