如何在 meteor+mongo 中实现多对多集合,以便集合可搜索 and/or 可按所有可能的字段排序?

How to implement a many-to-many collection in meteor+mongo such that the collection is searchable and/or sortable by all possible fields?

我正在尝试在 meteor/mongo 中实现一个具有以下性质的集合:

FIRST_NAME-------LAST_NAME-------------CLASSES----------PROFESSORS


------------A--------------------B---------- ------------------a--------------------b

-------------------------------------------- ----------------------c--------------------d

-------------------------------------------- ----------------------e--------------------f

-------------------------------------------- ----------------------g--------------------h


------------M------------------------N----- ------------------c--------------------d

-------------------------------------------- ----------------------p--------------------q

-------------------------------------------- ----------------------x--------------------q

-------------------------------------------- ----------------------m--------------------n

-------------------------------------------- ----------------------r--------------------d

所以如上,一个人可以带多个class,一个class可以带多个人。现在,我想让这个集合可以按所有可能的字段进行搜索和排序。 (此外,一位教授可以教授多位 classes。)

在上面显示的模型中,通过 FIRST_NAME 和 LAST_NAME 搜索很容易。但是,我应该能够看到所有学生,这取决于 class 我 select。我还想查看按字母顺序排序的 classes 列表以及相应 classes 中注册的人员?

你能告诉我如何以 meteor/mongo 的方式处理这个问题吗?如果您能引导我找到与此相关的任何可用资源,我也会很高兴?

您描述的是一种更适合关系数据库的典型数据结构。不过别担心。对于大小合理的数据集,它在 MongoDB 中也非常可行。

在文档数据库中对此类结构建模时,您使用嵌入,这确实会导致数据重复,但这种数据重复通常不是问题。

您模型的伪代码:

Collection schoolClass: { // Avoid the reserved word "class"
    _id: string,
    name: string,
    students: [ { _id: string, firstName: string, lastName: string } ],
    professor: { _id: string, firstName: string, lastName: string }
}

Collection student: {
    _id: string,
    firstName: string, 
    lastName: string,
    classes: [ { _id: string, name: string } ]
}

Collection professor: {
    _id: string,
    firstName: string, 
    lastName: string,
    classes: [ { _id: string, name: string } ]
}

这为您提供了轻松 searchable/sortable 所有对象的入口点。如果您需要某个对象的一些特殊数据,您只需跟随 "relation" _id 到下一个集合。公共查询中所有文档所需的所有数据都应存在于查询 运行 上的集合中。

您只需要确保在对象更改时更新所有相关集合。

好的读物是https://docs.mongodb.com/manual/core/data-modeling-introduction/