如何定义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" } >
我的问题 :
-
'ContactModel'
mongoose.model('ContactModel',ContactSchema);
究竟是什么? 代表? 这是一个名称自定义或完全名称的集合在分贝?- 我想创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'});
我工作了!