流星和MongoDB下降种群和完整性

流星和MongoDB下降种群和完整性,mongodb,meteor,Mongodb,Meteor,希望我能正确地描述这一点,但我来自RDBMS世界,我正在用Meteor构建一个库存类型的应用程序。Meteor和Mongodb可能不是该应用程序的最佳选择,但希望它能够实现,这似乎是许多转换人将遇到的情况 我试图忘记我所知道的关于关系数据库和引用完整性的许多事情,这样我就可以专心研究Mongodb了,但我一直在关注这个问题,以及如何使用Meteor找到合适的数据 inventory应用程序将有许多下拉列表,但我将使用一个示例来更好地解释。假设我想跟踪一个项目,所以我需要名称、手头数量、制造商和位

希望我能正确地描述这一点,但我来自RDBMS世界,我正在用Meteor构建一个库存类型的应用程序。Meteor和Mongodb可能不是该应用程序的最佳选择,但希望它能够实现,这似乎是许多转换人将遇到的情况

我试图忘记我所知道的关于关系数据库和引用完整性的许多事情,这样我就可以专心研究Mongodb了,但我一直在关注这个问题,以及如何使用Meteor找到合适的数据

inventory应用程序将有许多下拉列表,但我将使用一个示例来更好地解释。假设我想跟踪一个项目,所以我需要名称、手头数量、制造商和位置。远不止这些,但我保持简单

现有的名称和数量很简单,因为它们是由用户输入的,但是制造商和位置应该在数据驱动列表的下拉列表中选择(我假设有一个排序集合(如果是新的制造商或位置,则在列表中添加一个新的排序集合)。很可能我也会使用自动完成软件包,但要点是一样的。我当然不希望最终用户拼错制造商名称,从而导致文档应该是同一制造商的,但不是因为打字错误。因此,我需要某种方法来加强为Manufac存储的数据的完整性图勒和位置

原因是,当用户稍后查看所有库存项目时,他们可以选择筛选数据。他们可能希望按制造商、位置或两者筛选库存项目

在我的关系思维方式中,这将只是三个表。库存、制造商和位置。在库存表中,我将存储相关表行的ID

我试图弄清楚如何使用Mongodb存储这些数据,同样重要的是,如何首先找到这些制造商和位置项来填充下拉列表

我找到了下面这篇文章,它帮助我理解了一些事情,但不完全是我需要什么来连接我脑海中的点点滴滴

谢谢

[编辑]

当然,仍在进行这方面的工作,但我想到的最好方法是按照上述文章中列出的标准化方式进行。类似如下:

inventory
{
name: "Pen",
manufacturer: id: "25643"}, 
location: {id: "95789"} 
}

manufacturer
{
name: "BIC",
id: "25643"
}

location
{
name: "East Warehouse",
id: "95789"
}

似乎是这样(以更简单的形式)对于许多/大多数应用程序来说,这是一个非常常见的需求,因此我希望确保我正确地处理它。即使这个示例代码是正确的,我应该使用一个id字段来生成这样的数字,还是应该只使用内置的id字段?

我来自类似的背景,所以我不知道我做的是否正确确实是在我的应用程序中,但我选择了与您类似的选项。我的应用程序是一个电子学习应用程序,因此一个组织将有许多课程

因此,我的模式与您的模式类似,只是我显然有一个类似于
{course\u id:}

然后我注册了一名助手,然后从该组织获取数据,并添加我需要的有关课程的其他数据

// Gets Organisation Courses - In your case could get the locations/manufacturers
UI.registerHelper('organisationCourses', function() {
    user = Meteor.user();
    if (user) {
        organisation = Organisations.findOne({_id: user.profile.organisation._id});
        courses = organisation.courses.courses;
    return courses;
    } else {
        return false;
    }
});

// This takes the coursedata and for each course_id value finds and adds all the course data to the object
UI.registerHelper('courseData', function() {
    var courseContent = this;
    var course = Courses.findOne({'_id': courseContent.course_id});
    return _.extend(courseContent, _.omit(course, '_id'));
});
那么从我的页面上,我只需要打电话:

{{#each organisationCourses}}
    {{#with courseData}}
        {{> admListCoursesItem}}
    {{/with}}
{{/each}}

如果我没记错的话,我是从一个.

数据库中选择这种方法的。无论是在Mongo还是SQL数据库中,如果你想让下拉列表中填充数据,你可以用id->description创建一个下拉列表。在Meteor中,你发布制造商的集合,并用它填充下拉列表。到目前为止,没有什么不同。你什么时候想用I搜索在您的项目中,您将遇到另一个问题:如果您只在项目中保存ID,则无法按描述进行搜索。您需要查看数据的非规范化:我建议您检查:进行查找(联接)的权衡在搜索时,或对数据进行非规范化处理,但如果制造商信息发生变化,则必须更新每个项目。这完全取决于其变化的频率以及保持这些信息最新的重要性。关键是要弄清楚什么是典型查询,以及如何最有效地对数据进行建模以提高效率(不用担心存储空间,现在很便宜)