有效地使用异构模式查询MongoDB集合

时间:2018-04-05 12:53:33

标签: mongodb indexing mongoose mongodb-query partial-index

我正在使用NodeJS,MongoDB和Mongoose开发Web应用程序。它旨在充当用户和大数据环境之间的接口。这个想法是用户可以在一个独立的集群中执行大数据流程,结果存储在MongoDB集合Results中。该集合可以为每个用户存储超过100万个文档。

此集合的文档架构在用户之间可能完全不同。例如,我们有user1user2Resultsuser1的{​​{1}}集合中的文档示例:

user2

我在Web应用程序中实现了一个搜索引擎,以便每个用户都可以根据文档的模式过滤字段(例如,{ user: ObjectId(user1):, // reference to user1 in the Users collection inputFields: {variable1: 3, ...}, outputFields: { result1: 504.75 , ...} } { user: ObjectId(user2):, inputFields: {country: US, ...}, outputFields: { cost: 14354.45, ...} } 必须能够按{{1}过滤} {}和user1 inputFields.variable1)。当然我知道我必须使用索引,否则查询速度很慢。

我的第一次尝试是为user2集合中的每个不同字段创建索引,但由于索引的大小,数据库服务器变得不稳定,因此效率非常低。所以我的第二次尝试是尝试使用partial indexes来减少索引数量,以便我在选项outputFields.cost中创建指定用户ID的索引。

问题是如果另一个用户在Results集合中具有与任何其他用户相同的模式,并且我尝试为该用户创建索引,则MongoDB会抛出此异常:

partialFilterExpression

这是因为即使Results不同,部分索引也无法索引相同的字段。

所以我的问题是:如何让用户在这个环境中有效地查询他们的结果? MongoDB真的适合这个用例吗?

由于

0 个答案:

没有答案