- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用meteor的数据模型应该有多细粒度?
例如
假设我有一个 XmlDocument
模型,其中包含多个 XmlNode
。
我是否应该简单地创建一个 new Meteor.Collection("Documents")
并在整个文档的基础上进行更新,例如
Documents = new Meteor.Collection("documents");
Documents.insert(new XmlDocument());
var doc = Documents.findOne().fetch();
doc.nodes.push(new XmlNode());
Documents.update(doc);
或者我应该将节点拆分为一个单独的集合,其中每个项目都有一个其所属文档的 ID(即,就像 .NET Entity Framework 那样)?
我很难弄清楚这一点,因为我不确定 Meteor 实现的粒度有多细,即在执行 update
时,它是否与当前版本执行差异,并且仅对服务器执行最少量的工作,还是将整个数据作为单个事务发送?
最佳答案
不要每次都重新创建整个文档,而是使用 addToSet 并将其拉入文档中的数组。
var _newDocId = Documents.insert(new XmlDocument());
var _newNode = new XmlNode();
Documents.update({_id: _newDocId}, {$addToSet: {nodes: _newNode}});
更新数组中的文档有点棘手,因此您可能想确保这就是您想要做的事情,而不是使用单独的集合,但是您可以执行类似的操作
var _document = Documents.findOne({_id: _documentContainingNode});
var _nodeToUpdateIndex = _.indexOf(_.pluck(_document.nodes, '_id'), _nodeId);
var _modifier = {$set: {}};
_modifier.$set["nodes." + _nodeToUpdateIndex + ".description"] = "new description";
Documents.update({_id: _document._id}, _modifier);
更新数组内的对象是拥有大型嵌套对象的缺点。将它们分开的缺点是您必须确保将它们一起发布。而且,显然,您会失去操作的原子性。如果您想同时更新节点和文档。这更多的是你的决定而不是 Meteor“实现”
关于javascript - 我的模型应该有多细?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805913/
在命令提示符下,当你按下插入按钮时,光标从细条变为粗条,表明它处于覆盖模式,当你再次按下它时,它又变细表明它处于插入模式有什么办法可以在 C# 中执行此操作吗? 编辑:我想知道是否有办法使光标变粗/变
RubyRogues 播客上有人曾经说过“学习 CoffeeScript,因为 CoffeeScript 编写的 javascript 比你更好。”抱歉,不记得是谁说的... 所以,我采用了一个非常简
我是一名优秀的程序员,十分优秀!