我正在使用MeteorJS创建一个应用程序,允许用户创建项目(例如文本,图像)并在画布上协作空间组织这些项目。可以创建多个画布。将来,物品可以在多个画布中重复使用或复制(我不确定)。我以前从未设计过协作(甚至数据库驱动)的应用程序。
我找不到创建嵌套MeteorJS集合的可能性,我不确定使用多个集合(使用集合中的对象数组)的(dis)优势(例如考虑可伸缩性,速度),所以我想知道多么好的设计模式:
A:
Collection Canvases {
Canvas {
Array Items;
}
Canvas {
Array Items;
}
}
B:
Collection Items {
Item {
_id
}
Item {
_id
}
}
Collection Canvases {
Canvas {
Array ItemIDs;
}
Canvas {
Array ItemIDs;
}
}
或者也许是不同的东西?
答案 0 :(得分:1)
自Meteor“identifies changes based on the fields of the MongoDB document. But ... does not support nested fields and arrays”以来,我会使用您在提案B中建议的一些数据结构:两个集合。这样可以确保只有新的/更新的项目被推送到客户端而不是画布的所有项目。
然后在上面的评论中指出Canvas和Items之间的关系为saimeunt:Canvas{_id:"xxx"} Item{_id:"xxx",canvasId:"xxx"}
。 (我在我的项目minutocash中使用了类似的方法,但效果很好。)
此外,您可以使用发布与关系包发布画布的所有相关项目,正如David Weldon在this answer中指出的我的问题,关于一个问题稍后您可能会遇到这种数据结构。