diff --git a/types/mongoose/index.d.ts b/types/mongoose/index.d.ts index 70771c4398..a8c089c25a 100644 --- a/types/mongoose/index.d.ts +++ b/types/mongoose/index.d.ts @@ -2550,7 +2550,7 @@ declare module "mongoose" { * @param options.validateBeforeSave set to false to save without validating. * @param fn optional callback */ - save(fn?: (err: any, product: this, numAffected: number) => void): Promise; + save(options?: SaveOptions, fn?: (err: any, product: this, numAffected: number) => void): Promise; /** * Version using default version key. See http://mongoosejs.com/docs/guide.html#versionKey @@ -2559,6 +2559,21 @@ declare module "mongoose" { __v?: number; } + interface SaveOptions { + safe?: boolean | WriteConcern; + validateBeforeSave?: boolean; + } + + interface WriteConcern { + j?: boolean; + w?: number | 'majority' | TagSet; + wtimeout?: number; + } + + interface TagSet { + [k: string]: string; + } + interface ModelProperties { /** Base Mongoose instance the model uses. */ base: typeof mongoose; diff --git a/types/mongoose/mongoose-tests.ts b/types/mongoose/mongoose-tests.ts index dc170dccd9..0e8ade55ed 100644 --- a/types/mongoose/mongoose-tests.ts +++ b/types/mongoose/mongoose-tests.ts @@ -1050,7 +1050,7 @@ aggregate.unwind( includeArrayIndex: "idx", preserveNullAndEmptyArrays: true }); - + /* * section schematype.js * http://mongoosejs.com/docs/api.html#schematype-js @@ -1215,6 +1215,10 @@ MongoModel.find({}).$where('indexOf("val") !== -1').exec(function (err, docs) { MongoModel.findById(999, function (err, doc) { doc.increment(); doc.save(cb).then(cb).catch(cb); + doc.save({ validateBeforeSave: false }, cb).then(cb).catch(cb); + doc.save({ safe: true }, cb).then(cb).catch(cb); + doc.save({ safe: { w: 2, j: true } }, cb).then(cb).catch(cb); + doc.save({ safe: { w: 'majority', wtimeout: 10000 } }, cb).then(cb).catch(cb); }); MongoModel = (new MongoModel()).model('MongoModel'); var mongoModel = new MongoModel();