2016-11-13 94 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'...)中,人们是数据库中集合的名称?如果这是正确的:我不能使用我想要的任何名字? –