首页 > 解决方案 > 索引这么多MongoDB数据或更改方案的有效方法?

问题描述

我有包含这么多字段的数据,需要像这样查询:

name / marker1 / marker2 / ... / marker500k -- 这些是字段

A1231 / GG / CT / ... / TT -- 每一个都是一个文档 = {'name':'A1231', 'marker1':'GG, 'marker2':'CT', ...}

B3435 / GC / CT / ... / TA

Z4463 / CC / TT / ... / AA

查询应该是这些:

1)marker1、2、100、150、3000的统计数据如何?

答案是marker1:GG 100,GC 150,CC 80,marker2:某物,等等。

2)marker123155:AA 有什么名字?

Annwer是11个文件,分别是D13414、E31341等。

太慢了,字段多(百Ks),文档多(目前几十Ks)。

如果要索引“标记”,那么我应该将它们更改为类似 SQL 的“名称”、“标记#”、“类型”?否则,有没有更好的方法来使用 MongoDB 建模?

当前的:

{'name':'A1231', 'marker1':'GG, 'marker2':'CT', ... , 'marker3':'TT'}

成为:

{'name':'A1231', 'marker':'marker1', 'type':GG'}, {'name':'A1231', 'marker':'marker2', 'type':CT'}, ... , {'name':'A1231', 'marker':'marker500k', 'type':'TT'}

非常感谢任何提示或评论。

标签: mongodbindexingmongodb-queryschema

解决方案


您应该更改架构,使顶级文档包含marker文档数组,如下所示

{
   name: "A1231",
   markers: [
       {
           number: 1,
           tag: "GG"
       },
       {
           number: 2,
           tag: "CT"
       }
       ...
   ]
}

然后,您可以在 、 上创建一个索引markers.numbermarkers.tag并在它们上创建一个复合索引。


推荐阅读