0

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

此集合的文档架构在用户之间可能完全不同。例如,我们有user1user2。和Results集合中的文档示例:user1user2

{
 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, ...}
}

我在 Web 应用程序中实现了一个搜索引擎,以便每个用户都可以根据他们的文档模式在字段中进行过滤(例如,user1我必须能够通过inputFields.variable1user2by进行过滤outputFields.cost)。当然我知道我必须使用索引,否则查询会很慢。

我的第一次尝试是为Results集合中的每个不同字段创建一个索引,但是效率很低,因为由于索引的大小,数据库服务器变得不稳定。所以我的第二次尝试是尝试通过使用部分索引来减少索引的数量,以便我在选项中创建指定用户 ID 的索引partialFilterExpression

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

Index with pattern: { inputFields.country: 1 } already exists with different options

发生这种情况是因为部分索引无法索引相同的字段,即使它们partialFilterExpression不同。

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

谢谢

4

0 回答 0