如何定义mongoose中提琴的模型和方法?

我是mongodb和nodejs的新手。 我创build了一个模式,如:

var mongoose = require('mongoose'), Schema = mongoose.Schema; var ContactSchema = new Schema({ name : String, email: String, number : String }); ContactSchema.methods.selectAll = function (callback){ console.log("I got list contact"); ContactModel.find({}).exec(function(err,items){ if(err) console.error(err.stack); else{ var notify = { 'message' : 'select all document successfully', 'data' : items, 'status' : 1 }; console.log(notify); callback(); }; }); }; var ContactModel = mongoose.model('contactlist',ContactSchema); module.exports = ContactModel; 

假设我已经连接到数据库'mongodb://localhost:27017/contactlist' 。 它有一个数据库名称contactlist ,一个文件的收集contactlist

 > db.contactlist.find({}) { "_id" : ObjectId("576e8ac6d68807e6244f3cdb"), "name" : "Tome", "email" : "Tome@gmail.com", "number" : "333-333-333" } { "_id" : ObjectId("576e8b4fd68807e6244f3cdc"), "name" : "Trace", "email" : "Trace@gmail.com", "number" : "444-444-444" } { "_id" : ObjectId("576e8b4fd68807e6244f3cdd"), "name" : "Tuker", "email" : "Tuker@gmail.com", "number" : "555-444-777" } > 

我的问题

  1. 'ContactModel' mongoose.model('ContactModel',ContactSchema);究竟是什么? 代表? 这是一个名称自定义或完全名称的集合在分贝?

    1. 我想创build一个模型的方法(crud任务)

    ContactSchema.methods.selectAll = function (){ // code here }

这个方法可以selectmongo中的一个集合的所有文档,但是我的ContactModel.find函数返回null项目。

 $ node server development server is running at 127.0.0.1 port 3000 I got list contact { message: 'select all document successfully', data: [], status: 1 } undefined 

我的意思是当我使用mongoose的find api。 怎么做?

很高兴你已经以某种方式解决了你的问题。 但是这只是为了解决你面临的问题的根源。 希望其他人觉得有帮助。

我想你已经创build了一个名为contactlist的数据库,并且在mongoose做了之前创build了一个名为contactlist的集合。 mongoose试图变聪明,把集合名称作为模型的复数名称(lib / npm源代码参考 ,所有相关的规则都在这个文件中定义)。 在你的情况下,它可能已经创build了一个名为contactlists的集合

尽pipe在创build模型时可以通过将模型的第三个参数作为parameter passing给您,但您可以通过select它来明确地指定您的集合:

 var ContactSchema = new Schema({ name : String /* , ..... */ },{collection : 'contactlist'}); 

这种行为在mongoose模型API参考中清楚地logging:

当没有收集parameter passing时,Mongoose通过将模型名称传递给utils.toCollectionName方法来生成一个集合名称。 这种方法复数名称。 如果您不喜欢这种行为,请传递集合名称或设置您的模式集合名称选项。

我重新解决了我的问题。 我们必须通过收集我们的地图

 var mongoose = require('mongoose'), Schema = mongoose.Schema; var ContactSchema = new Schema({ name : String, email: String, number : String },{collection : 'contactlist'}); 

我工作了!