【问题标题】:mongoose best practices for objects对象的猫鼬最佳实践
【发布时间】:2014-01-28 00:29:13
【问题描述】:

我有一个 user.js 文件,其中包含我所有的 mongoose 架构和方法,大致如下:

var userSchema = mongoose.Schema({
  name: { type: String, required: true, trim: true },
  surname: { type: String, required: true },
});

var User = mongoose.model('User', userSchema);

现在,最好公开对数据建模的函数吗?像这样:

exports.addUser = function(data, next){
  user = new User(data);
  user.save(next);
};

exports.getAll = function(next){
  var query = User.find();
  query.exec(next);
};

或者像这样只公开User 对象以便在其他地方使用?

module.exports = User; //or
exports.User = User;

我也面临第二个解决方案衍生的问题,假设我想将汽车列表添加到我的userSchema,并且汽车模式在另一个文件 car.js 中定义,那么这意味着我将不得不为我的 user.js 文件公开carSchema,对吗?这意味着我实际上是在取消我上面提供的第二种解决方案,那么,做这种事情的正确方法是什么?

【问题讨论】:

  • 我不会将架构定义分散到单个类的多个文件中。

标签: node.js mongodb mongoose mongoose-schema


【解决方案1】:

有趣的问题。

这可能只是一个“语法糖”的东西,但我坚持使用第二个变体,因为恕我直言,无需封装一代等。猫鼬是这些东西的包装,然后可以使用纯猫鼬模型和架构。这听起来合理吗?

exports.User = User;

【讨论】:

  • 完全同意。如果需要实现与模型相关的自定义功能,Mongoose 也有实现staticinstance 方法的接口。
  • 确实有道理,但如果如问题中所述,用户还包含另一个模式怎么办?想象一个 userSchema 也有这样的汽车:cars: [carSchema]。那么我是否还需要在 car.js 中有 exports.carSchema = mongoose.Schema({whatever}) 之类的东西?
  • 希望我没听错。请看一下这个要点:gist.github.com/johannesboyne/8347861 如你所见,我使用了这种猫鼬方法 orgas: [{type: mongoose.Schema.ObjectId, ref: 'Organization'}] 来链接它们,但由于必须导出这两个模式。感觉不错,因为在我们的 MongoDB 中为每个模式创建了一个新的 Document-Collection,不是吗?
  • 看看这个问题,我解释得更详细了。 stackoverflow.com/questions/21023089/…
猜你喜欢
  • 2011-07-12
  • 2011-12-27
  • 2021-01-18
  • 1970-01-01
  • 2012-02-19
  • 2015-01-13
  • 2014-06-16
  • 2021-07-31
  • 2010-10-04
相关资源
最近更新 更多