gpt4 book ai didi

javascript - 我的模型应该有多细?

转载 作者:行者123 更新时间:2023-12-03 12:14:09 24 4
gpt4 key购买 nike

使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com