【问题标题】:Mongoose ODM use猫鼬ODM使用
【发布时间】:2013-06-22 15:43:03
【问题描述】:

我在此链接中阅读了一篇文章http://theholmesoffice.com/mongoose-and-node-js-tutorial/ 这里有一个代码:

exports.teamlist = function(gname,callback){


db.once('open', function(){
  var teamSchema = new mongoose.Schema({
   country: String,
   GroupName: String
  });
  var Team = db.model('Team', teamSchema);
  Team.find({'GroupName':gname}, function (err, teams) {
   if(err){
    onErr(err,callback);
   }else{
    mongoose.connection.close();
    console.log(teams);
    callback("",teams);
   }
  })// end Team.find
 });// end db.once open
};

这里它调用 db.once 方法,而在其他地方它是这样使用的

var mongoose = require('mongoose')
   ,Schema = mongoose.Schema
   ,ObjectId = Schema.ObjectId;

var postSchema = new Schema({
    thread: ObjectId,
    date: {type: Date, default: Date.now},
    author: {type: String, default: 'Anon'},
    post: String
});

module.exports = mongoose.model('Post', postSchema);

在路由器部分是这样使用的

exports.show = (function(req, res) {
    Thread.findOne({title: req.params.title}, function(error, thread) {
        var posts = Post.find({thread: thread._id}, function(error, posts) {
          res.send([{thread: thread, posts: posts}]);
        });
    })
});

在 app.js 中有

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/norum');

我不明白为什么这两个有不同的方法,哪个更好,为什么?谁能帮帮我吗。我观察到的一件事是第二种方法是最常用的方法。所以请帮我看看哪个是更好的方法。 我知道这主要与在 Mongodb 中创建方案有关,因此 one 方法看起来好一点。但我仍然不确定。请帮忙。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    基本上,在第一种方法中 - 它向您展示了您可以对猫鼬做什么。它假定您在某个地方打开了与数据库的连接(大概是几串代码)。然后它监听事件并稍后完成所有工作。它只是为了向您展示您可以做什么。

    例如,这会创建一个 mongoose 模型(它不依赖于打开的数据库连接) - 因此它可以轻松地从单独的文件中包含,并且通常像第二种方法一样作为模块编写

    var teamSchema = new mongoose.Schema({
       country: String,
       GroupName: String
      });
    var Team = db.model('Team', teamSchema);
    

    稍后在第一种方法中,您关闭与数据库的连接,但这不是您想要在实际应用程序中做的事情。您有一个连接池,并使用它来频繁查询数据库,仅当您计划停止应用程序运行时才需要关闭连接。

      Team.find({'GroupName':gname}, function (err, teams) {
       if(err){
        onErr(err,callback);
       }else{
        mongoose.connection.close();
        console.log(teams);
        callback("",teams);
       }
    

    第一行 - 你在数据库上执行查找,如果没有返回错误 - 你关闭连接,记录结果等等。

    总之,总结一下 - 第一种方法通常是一种炫耀,第二种方法 - 是在现实世界中的样子 - 你分离逻辑,使模型可重用和包含,你有路由器逻辑

    【讨论】:

    • 我将原始文章作为构建堆栈部分的系列文章的一部分。此处的连接方法没有显示最佳实践 - 您通常应该在应用程序启动时打开连接,并在结束时关闭它。我写了一篇额外的帖子来澄清这一点:theholmesoffice.com/mongoose-connection-best-practice
    猜你喜欢
    • 2015-03-24
    • 2019-01-30
    • 2017-01-08
    • 1970-01-01
    • 2016-04-09
    • 2012-03-21
    • 2018-07-22
    • 2011-10-25
    • 2016-01-01
    相关资源
    最近更新 更多