mongodb如何同时使用查询条件、索引和排序?

mongodb如何同时使用查询条件、索引和排序?,mongodb,sorting,indexing,find,Mongodb,Sorting,Indexing,Find,我公司的项目使用mongodb作为数据库。 当前数据结构如下:对于表用户 { username:xxx, password:xxx, firstname:xxx, lastname:xxx, age:xxx, created_at:xxx, updated_at:xxx } 因为任何查询条件和排序条件都会支持此数据。 您知道mongodb首先必须使用组合字段索引,但我不能对每个字段组合都使用索引 因此,我尝试如下更改数据结构: { data:[{key:user

我公司的项目使用mongodb作为数据库。 当前数据结构如下:对于表用户

{
  username:xxx,
  password:xxx,
  firstname:xxx,
  lastname:xxx,
  age:xxx,
  created_at:xxx,
  updated_at:xxx
}
因为任何查询条件和排序条件都会支持此数据。 您知道mongodb首先必须使用组合字段索引,但我不能对每个字段组合都使用索引

因此,我尝试如下更改数据结构:

{
  data:[{key:username,value:xxx},
        {key:password,value:xxx},
        ....],
  username:xxx,
  password:xxx,
  firstname:xxx,
  lastname:xxx,
  age:xxx,
  created_at:xxx,
  updated_at:xxx
}
如果我仍然使用db.collection.find函数,我就不能使用sort。因为当data.key=username,sort data.value时,我无法实现这一点

如果我使用db.coolection.aggregate函数,我不能支持对多个字段进行排序

那么我怎样才能实现我的目标呢

是否有其他数据结构设计?
或者我可以为“查找”或“聚合”函数做什么选择?

为什么说在使用聚合时不能按多个字段排序?>因为任何查询条件和排序条件都会支持此数据。您知道mongodb首先必须使用合并字段索引,但我不能对每个字段组合使用索引。对不起,按enter键太快了。我真的不清楚问题出在哪里。你是说你不能有效地搜索那些文档,因为你不能创建足够的复合索引?我不明白为什么在每个字段上创建一个普通索引会有问题。存储键值对数组是一种反模式,最好避免。如果你能重述问题所在,那会很有帮助。我这样使用聚合:`User.aggregate[{$match:{$and:matchObj1}},{$unwind:'$data'},{$match:{$and:matchSort}},{$sort:{'data.value':-1}}];`您知道排序将依赖于$unwind:“$data”}。如果我需要按多个字段排序,我应该怎么做?对于所有20个问题:我只知道mongodb在2.6版中有索引交集。但是我的项目mongodb版本是2.4。我知道这个问题有点复杂。我可以创建足够多的复合索引,但我认为这有点愚蠢,若我向表中添加一个新字段,我必须创建越来越多的复合索引。所以我决定在data.key和data.value中更改数据结构以创建一次索引。但问题是我无法按多个字段进行聚合排序。