mongodb - 索引这么多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'}
非常感谢任何提示或评论。
解决方案
您应该更改架构,使顶级文档包含marker
文档数组,如下所示
{
name: "A1231",
markers: [
{
number: 1,
tag: "GG"
},
{
number: 2,
tag: "CT"
}
...
]
}
然后,您可以在 、 上创建一个索引markers.number
,markers.tag
并在它们上创建一个复合索引。
推荐阅读
- android - AnimationController 在颤动中平滑停止
- java - 在另一个回调方法中循环回调方法
- sql-server - 自动安装 SSRS
- html - 父 div 覆盖子 div 的 ::after 背景
- python - 使用 pandas str.split,其中出现需要是 pandas 列的值
- node.js - 使用 docker 时,npm 库不工作
- c# - 没有视图矩阵的 WorldToScreen 函数
- next.js - 如何避免 Next.js 中出现“You have not declared a namespacesRequired array”错误?
- c++ - 尝试使用 GDAL 的 GDALDataset::GetLayers() 编译时未定义的引用
- javascript - 当我将状态从 true 更改为 false 时,为什么我的模态不会隐藏在反应中?