如果我尝试使用db.model()找到存储在数据库中的文档,如mongoose docs建议使用mongoose,我没有得到任何结果:(
但是,如果我使用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 :(得分:0)
问题在于这一行:var Person = this.db.model('people', personSchema);
Mongoose自动将模型转换为复数,请尝试以下操作:var Person = this.db.model('person', personSchema);
答案 1 :(得分:0)
经过一些研究,我弄清楚为什么我没有得到结果。这一切都属于细节。在Person.js中,我有以下几行:
var q = Person.find({ name: /^term/ }).sort('age').limit(2);
如果仔细观察,问题就在于/ ^ term / where变量中的term,但不会转换为其值。相反,我做了:
var regTerm = new RegExp("^" + term);
现在,regTerm可以作为查找中的常规用途。
希望这有助于将来。