Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的模型应该有多细粒度?_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 我的模型应该有多细粒度?

Javascript 我的模型应该有多细粒度?,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,使用meteor的数据模型应该有多细粒度 e、 g 假设我有一个XmlDocument模型,它包含几个XmlNodes 我应该仅仅创建一个新的Meteor.Collection(“文档”)并在整个文档的基础上进行更新吗 Documents = new Meteor.Collection("documents"); Documents.insert(new XmlDocument()); var doc = Documents.findOne().fetch(); doc.nodes.pus

使用meteor的数据模型应该有多细粒度

e、 g

假设我有一个
XmlDocument
模型,它包含几个
XmlNodes

我应该仅仅创建一个新的Meteor.Collection(“文档”)并在整个文档的基础上进行更新吗

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的id)


我很难弄清楚这一点,因为我不确定Meteor实现的粒度有多细,也就是说,在执行
更新时,它是否与当前版本有差异,并且只对服务器执行最少的工作,或者它只是将整个数据作为单个事务发送?

不是每次都重新创建整个文档,而是使用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);
更新数组中的对象是拥有大型嵌套对象的缺点。 将它们分开的缺点是,您必须确保将它们一起发布。。很明显,你失去了操作的原子性。如果要同时对节点和文档进行更新。 这更多的是你的决定,而不是流星“实施”

或者它只是将整个数据作为单个事务发送

不幸的是,任何文档更改都会将整个文档发送给客户。因此,我认为,以这种方式构建数据库结构是不明智的——这意味着一个集合中有一个大文档(而不是几个集合)。如果您安装并启用DDP,则可以查看DDP如何工作以及它将向您发送什么