2011-09-14 47 views
32

locationsModel文件:如何在Mongoose模型中定義方法?

mongoose = require 'mongoose' 
threeTaps = require '../modules/threeTaps' 

Schema = mongoose.Schema 
ObjectId = Schema.ObjectId 

LocationSchema = 
    latitude: String 
    longitude: String 
    locationText: String 

Location = new Schema LocationSchema 

Location.methods.testFunc = (callback) -> 
    console.log 'in test' 


mongoose.model('Location', Location); 

稱呼它,我使用:

myLocation.testFunc {locationText: locationText}, (err, results) -> 

但我得到一個錯誤:

TypeError: Object function model() { 
    Model.apply(this, arguments); 
    } has no method 'testFunc' 

回答

24

嗯 - 我想你的代碼應該是看起來更像這樣:

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

var threeTaps = require '../modules/threeTaps'; 


var LocationSchema = new Schema ({ 
    latitude: String, 
    longitude: String, 
    locationText: String 
}); 


LocationSchema.methods.testFunc = function testFunc(params, callback) { 
    //implementation code goes here 
} 

mongoose.model('Location', LocationSchema); 
module.exports = mongoose.model('Location'); 

然後調用代碼可以要求上述模塊和實例模型是這樣的:

var Location = require('model file'); 
var aLocation = new Location(); 

,並訪問你的方法是這樣的:

aLocation.testFunc(params, function() { //handle callback here }); 
+0

對不起,如果我在這裏誤讀,但我沒有看到這與OPs代碼有什麼不同。 – Will

+0

可以使用mongoDB shell以某種方式使用相同的方法嗎? – p0lAris

+0

@我想不同的是iZ。將該功能應用於模式而不是模型。 – kim3er

15

Mongoose docs on methods

var animalSchema = new Schema({ name: String, type: String }); 

animalSchema.methods.findSimilarTypes = function (cb) { 
    return this.model('Animal').find({ type: this.type }, cb); 
} 
+1

+1鏈接到文件 – allenhwkim

+1

的問題是,在我的執行,我得到「animal.findSimilarTypes不是一個函數」的消息! –

+0

在我的情況下,使用完全相同的示例'this.model'是未定義的。任何想法爲什麼? –

35

您沒有指定是否在尋找定義類或實例方法。既然別人已經覆蓋實例方法,here's怎麼你定義一個類/靜態方法:

animalSchema.statics.findByName = function (name, cb) { 
    this.find({ 
     name: new RegExp(name, 'i') 
    }, cb); 
} 
+1

只是爲了完成你的答案,這是使用實例(來自同一頁): '變種動物= mongoose.model( '動物',animalSchema);' Animal.findByName( '來福',函數(ERR,動物){控制檯.LOG(動物)}); –

+0

萬歲!那是我正在尋找的 – Vaiden

0
Location.methods.testFunc = (callback) -> 
    console.log 'in test' 

應該

LocationSchema.methods.testFunc = (callback) -> 
    console.log 'in test' 

的方法必須是架構的一部分。不是模型。

相關問題