哪种猫鼬模型会更有效率?

时间:2016-12-12 17:01:20

标签: node.js mongodb mongoose mongoose-schema

我是no-sql的新手。我正在尝试在nodejs中构建一个简单的电子商务应用程序。现在,对于产品我需要构建CRUD操作,以便只有所有者可以编辑它们,其余的READ-ONLY访问权限。主要问题是更好的实施?

我当前的代码就像

var mongoose = require('mongoose');

module.exports = mongoose.model('product',new mongoose.Schema({
  owner      : {type: String},
  title      : {type: String},
  ...
}));

所有者实际上是我的用户模型中的_id。基本上这就像外键。这是一个有效的方法,或者我应该在user model内添加一个数组来存储他拥有的对象列表?

此外,我想验证我刚刚为所有者做了什么,在UID中存储String是最佳做法,还是我应该做其他事情来引用用户模型。

先谢谢你帮助我。

1 个答案:

答案 0 :(得分:1)

文档数据库的重点是你不应该有外国关系;您的文档所需的所有数据都应在文档中进行非规范化。

因此,在product文档中,您应该复制所需的所有所有者详细信息。您可以存储他们的_id以进行查找,但不要使用字符串,请使用实际的ObjectId()

有关非规范化的更多信息,请参阅The Little MongoDB Book

  

使用连接的另一种替代方法是对数据进行非规范化。从历史上看,非规范化是为性能敏感的代码保留的,或者是应该对数据进行快照(如在审计日志中)。然而,随着NoSQL的日益普及,其中许多没有连接,非规范化作为正常建模的一部分变得越来越普遍。这并不意味着您应该复制每个文档中的每条信息。但是,不要让对重复数据的恐惧驱动您的设计决策,而应考虑根据哪些信息属于哪个文档来建模数据。