发现不使用mongoose 4.6。*

时间:2016-11-13 18:22:40

标签: node.js mongodb mongoose

如果我尝试使用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;

2 个答案:

答案 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可以作为查找中的常规用途。

希望这有助于将来。