使用Meteor绑定MongoDB集合的干净方法是什么

时间:2016-02-15 21:25:46

标签: mongodb meteor

我是一名SQL用户,我尝试了解如何使用 MongoDB 以及 Meteor 以干净的方式工作。

我的程序很简单:

根据类别列出对象(对象只属于一个类别)。 因此,我希望我的程序以这种方式发布(显示)我的对象:

  • 组别

    • 对象A
    • 对象B
  • 类别2

    • ObjectC
    • ObjectD

据我所知,我首先创作了我的藏品:

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?
}) ;

我想了解如何在不减轻数据量并且不会提出过多请求的情况下建立这些连接。

1 个答案:

答案 0 :(得分:1)

没有简单的答案,因为它取决于您的应用需求。 真正重要的是您的应用程序的使用。 trafficratio 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以上代码将有效

请记住,这个主题更广泛,更深入。