2011-09-14 17 views
32

मेरे locationsModel फ़ाइल:मैं मोंगोस मॉडल में विधियों को कैसे परिभाषित करूं?

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

क्षमा करें अगर मैं यहां गलत पढ़ रहा हूं, लेकिन मुझे नहीं लगता कि यह ओपीएस कोड से अलग कैसे है। – Will

+0

क्या एमओडीओडीबी खोल का उपयोग कर किसी भी विधि का उपयोग किया जा सकता है? – p0lAris

+0

@Will, मुझे लगता है कि अंतर यह है कि 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

बस अपना उत्तर पूरा करने के लिए यह उपयोग उदाहरण है (उसी पृष्ठ से): 'var Animal = mongoose.model ('Animal', animalSchema);' Animal.findByName ('fido', function (err, animals) {console लॉग (जानवरों)}); –

+0

स्थिर के लिए हुरेय! वह जो मैं खोज रहा था – Vaiden

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

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

तरीकों स्कीमा का एक हिस्सा होने के लिए होना चाहिए। मॉडल नहीं

संबंधित मुद्दे