2016-06-26 74 views
1

我是mongodb和nodejs的新手。我創建模式,如:如何在貓鼬中套裝中定義模型和方法?

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" : "[email protected]", "number" : "333-333-333" } 
{ "_id" : ObjectId("576e8b4fd68807e6244f3cdc"), "name" : "Trace", "email" : "[email protected]", "number" : "444-444-444" } 
{ "_id" : ObjectId("576e8b4fd68807e6244f3cdd"), "name" : "Tuker", "email" : "[email protected]", "number" : "555-444-777" } 
> 

我的問題

  1. 是什麼在mongoose.model('ContactModel',ContactSchema);正是'ContactModel'立場?這是一個名稱自定義或完全名稱的集合在db中?

  2. 我想創建模型的方法(CRUD任務)

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

這種方法可以選擇在集合中的所有文件mongo但我的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 

我的意思是當我使用貓鼬find api。怎麼做?

回答

1

很高興你已經解決了你的問題。但這只是爲了解決您遇到的問題的根本原因。希望其他人覺得有幫助。

我想你已經在貓鼬做了它之前創建了一個名爲contactlist的數據庫和一個名爲contactlist的集合。並且貓鼬試圖變聰明並且將集合名稱作爲模型的複數名稱(lib/npm源代碼reference,並且所有相關規則在this file中定義)。在你的情況下,它可能已經創建了一個名爲集合contactlists

雖然讓你通過把它當作第三個參數模型(你的方式做的話)創建模型時,明確命名您的收藏選項:

當沒有收集參數傳遞,貓鼬通過傳遞模產生集合名稱:

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


這種行爲在貓鼬模型 API reference被清晰地記錄el名稱添加到utils.toCollectionName方法。這種方法將名稱複數化。如果您不喜歡這種行爲,請傳遞集合名稱或設置您的模式集合名稱選項。

0

我重新回到了我的問題。我們必須通過收集我們的地圖

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

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

我工作!