我正在使用NodeJS,MongoDB和Mongoose开发Web应用程序。它旨在充当用户和大数据环境之间的接口。这个想法是用户可以在一个独立的集群中执行大数据流程,结果存储在MongoDB集合Results
中。该集合可以为每个用户存储超过100万个文档。
此集合的文档架构在用户之间可能完全不同。例如,我们有user1
和user2
。 Results
和user1
的{{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真的适合这个用例吗?
由于