2016-11-13 112 views
0

使用貓鼬,如果我試圖找到使用db.model()像貓鼬文檔存儲在數據庫中的文檔建議,我沒有得到任何結果:(查找不與貓鼬4.6工作。*

不過,如果我使用db.collection()。find()方法,我得到的結果。

這是爲什麼?又會有怎樣使用下面?

示例代碼的最佳方法app.js

var mongoose = require('mongoose'); 

mongoose.Promise = global.Promise; 
mongoose.connect(config.database.url); // database configuration 
app.locals.db = mongoose.connection; 

app.locals.db.on('error', function(msg){ 
    console.log("db connection failed", msg); 
}); 

app.locals.db.once('open', function(){ 
    console.log("db connected successfully"); 
}); 

在路由 - > person.js

var Person = require('Person'); 

router.post('/search', function(req, res) { 
    var person = new Person(req.app.locals.db); 
    person.getPerson(req.body.name, function(found, docs) { 
     if (found === false) 
     res.render('pageTpl', { results: 'person not found' }); 
     else 
     res.render('pageTpl', { results: docs }); 
}); 

在Person.js

// schema here returns new mongoose.Schema({ fields : types }) 
const personSchema = require('./schemas/personSchema'); 

function Person(db) { 
    this.db = db; 
} 

Person.prototype.getPerson = function(term, callback) { 
    var Person = this.db.model('people', personSchema); 
     var q = Person.find({ name: /^term/ }).sort('age').limit(2); 

     q.exec(function(err, results) { 
     if (err) return callback (false, err); 

     // This returns [] results 
     console.log(results); 
     callback(true, results); 
    }); 
}); 

module.exports = Person; 

回答

0

經過一些更多的研究,我找出了爲什麼我沒有得到結果。這一切都屬於細節。在Person.js我有以下行:

var q = Person.find({ name: /^term/ }).sort('age').limit(2); 

如果你仔細觀察,該問題存在於這裏/ ^長期/短期地方在一個變量,但沒有得到轉化爲它的價值。相反,我做了:

var regTerm = new RegExp("^" + term); 

現在,regTerm可以用作find中的常規演示。

希望這可以幫助未來的人。

0

問題是與這一行:var Person = this.db.model('people', personSchema);

貓鼬自動地轉換模式的多個這樣請嘗試以下操作:var Person = this.db.model('person', personSchema);

+0

在數據庫中,我有一個名爲:people的集合。我假設並猜測在this.db.model('people'...)中,人們是數據庫中集合的名稱?如果這是正確的:我不能使用我想要的任何名字? –