首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongoose ODM使用

Mongoose ODM使用
EN

Stack Overflow用户
提问于 2013-06-22 14:33:49
回答 1查看 398关注 0票数 0

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

代码语言:javascript
复制
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方法,而在其他地方,它的用法如下

代码语言:javascript
复制
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);

在路由器部分,它的用法如下所示

代码语言:javascript
复制
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中有

代码语言:javascript
复制
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/norum');

我不明白为什么这两个有不同的方法,哪一个更好,为什么?有谁能帮帮我。我观察到的一件事是,第二种方法是最常用的一种。所以请告诉我哪一个是更好的方法。我知道这主要是关于在Mongodb中创建方案,所以once方法看起来好不到哪里去。但我还是一点也不确定。请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-22 15:43:04

基本上,在第一种方法中-它微不足道地向您展示了您可以对mongoose做什么。它假设您在某个地方打开了一个到数据库的连接(可能是几个返回的代码串)。然后,它监听事件,并在以后完成所有工作。它只是为了向你展示你能做什么。

就意图而言,这创建了一个mongoose模型(它不依赖于打开的数据库连接)-因此,它可以很容易地从一个单独的文件中包含进来,并且通常像在第二种方法中那样编写为一个模块

代码语言:javascript
复制
var teamSchema = new mongoose.Schema({
   country: String,
   GroupName: String
  });
var Team = db.model('Team', teamSchema);

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

代码语言:javascript
复制
  Team.find({'GroupName':gname}, function (err, teams) {
   if(err){
    onErr(err,callback);
   }else{
    mongoose.connection.close();
    console.log(teams);
    callback("",teams);
   }

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17248031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档