如何在Node中使用Mongoose访问`findAndModify`方法?

这是/models/joke.js

 var mongoose = require ('mongoose') , database = mongoose.connect('localhost', 'joke', { server: { poolSize: 3 } }); var jokeSchema = mongoose.Schema({ content: String, upvotes: { type: Number, default: 0 }, downvotes: { type: Number, default: 0 }, views: { type: Number, default: 0 }, published: { type: Boolean, default: true }, author_id: Number, created: { type: Date, default: Date.now } }); var Joke = mongoose.model('Joke', jokeSchema); module.exports = Joke; 

我正在做这个检查是否存在 – 如果不存在,那么创build:

 var Joke = require ('./models/joke'); // ... Joke.findAndModify({ query: { content: content }, update: { $setOnInsert: { content: "test", } }, new: true, upsert: true }); 

但我的控制台喊我以下内容:

 TypeError: Object function model(doc, fields, skipId) { if (!(this instanceof model)) return new model(doc, fields, skipId); Model.call(this, doc, fields, skipId); } has no method 'findAndModify' 

我可以理解错误的原因 – 我通过模型而不是集合来调用它 ,但是如何访问我的笑话的收集方法?

我的意思是,所有的例子都使用db.collection.findAndModify ,但这是什么db.collection ? 我怎样称呼它?

要从Mongoose访问findAndModify更新function,请使用findOneAndUpdate

 Joke.findOneAndUpdate( { content: content }, { $setOnInsert: { content: "test" } }, { new: true, upsert: true }, callback );