我是一名SQL用户,我尝试了解如何使用 MongoDB 以及 Meteor 以干净的方式工作。
我的程序很简单:
根据类别列出对象(对象只属于一个类别)。 因此,我希望我的程序以这种方式发布(显示)我的对象:
组别
类别2
据我所知,我首先创作了我的藏品:
Objects = new Mongo.Collection(objects);
Categories = new Mongo.Collection('categories');
要说对象X属于category1,我是否必须在对象中定义类别的id?
Objects.update(objectId,{
categorieId : categorieId
}) ;
或者我必须在Object
中定义对象类别Objects.update(objectId,{
categorie : categorieObject
}) ;
但我还必须为该类别制作它?
Categories.update(categoriesId,{
Objects: [objectObject] //But how to define one more without crushing those already existing?
}) ;
我想了解如何在不减轻数据量并且不会提出过多请求的情况下建立这些连接。
答案 0 :(得分:1)
没有简单的答案,因为它取决于您的应用需求。
真正重要的是您的应用程序的使用。
traffic
,ratio read/write
有多大。您多久更新一次Categories
?
如果您的应用应该进行大量优化(流量大),那么您希望尽可能少地订阅。
在这种情况下,您可能希望在Category
文档中嵌入Object
,因为从Category
访问Object
并不需要做任何额外的工作。
如果您想要更改Category
对象中的任何内容,则会出现此解决方案的缺点,您必须迭代所有Objects
并相应地进行更新。
在这种情况下,我会使用Category
字段从Object
引用categorieId
。有一个很好的package Astronomy可以帮助创建联接' :
Object = new Astro.Class( {
name: 'Object',
collection: Objects,
fields: {
'categorieId' : {type:"String"}
},
validators:{
'categorieId' : Validators.isCategorie()
},
methods:{
category: function(){
return Categories.findOne({_id:this.categorieId})
}
}
} )
在server side
上,您可以使用
Category
Objects.findOne({_id:"<some existing id>"}).category()
如果您正确订阅了client side
。
Categories
以上代码将有效
请记住,这个主题更广泛,更深入。