存储枚举 MongoDB

2024-02-15

我在 Mongo 数据库中存储每个用户的排名(管理员、版主、用户...)和成就等枚举。据我所知,Mongo 没有枚举数据类型,这意味着我必须使用其他类型来存储它。

我曾想过使用整数来存储它,我认为它比存储可以轻松表示为整数的所有内容的字符串占用的空间更少。我看到使用整数的另一个好处是,如果我想重命名一项成就或排名,我可以轻松更改它,甚至无需接触数据库。我认为使用字符串的一个好处是,数据在使用之前需要更少的处理,并且更具人类可读性,这可以帮助跟踪错误。

在 Mongo 中存储枚举有更好的方法吗?是否有充分的理由使用整数或字符串? (试图远离哪个更好的问题)


TL;DR:字符串可能是safer选择,并且性能差异应该可以忽略不计。整数对于必须对枚举进行索引的大型集合有意义。 YMMV。

我曾想过使用整数存储它,我认为它比存储可以轻松表示为整数的所有内容的字符串占用的空间更少

True.

我看到使用整数的另一个好处是,如果我想重命名一项成就或排名,我可以轻松更改它,甚至无需接触数据库。

我认为这是整数的一个关键好处。但是,它还要求您确保关联的值enum不要改变。如果你搞砸了,你就会几乎肯定会造成严重破坏,这是一个巨大的劣势。

我认为使用字符串的一个好处是数据在使用之前需要较少的处理

如果您实际上使用枚举数据类型,它内部可能是某种整数,因此整数应该需要较少的处理。不管怎样,这种开销应该可以忽略不计。

是否有充分的理由使用整数或字符串?

我重复了很多内容,但这也许对其他读者有帮助。加起来:

  • 混合枚举值映射会造成严重破坏。想象一下你的Declined状态突然被解释为Accepted, 因为Declined原来的值为“2”,现在是Accepted因为您重新排序了枚举并忘记手动分配值...(shudders)
  • 弦乐更具表现力
  • 整数占用更少的空间。通常,磁盘空间并不重要,但索引空间会占用 RAM,这很昂贵。
  • 整数更新不会调整对象的大小。如果字符串的长度变化很大,则可能需要重新分配。不过,字符串填充和填充因子应该可以缓解这种情况。
  • 整数可以是标志(还不能查询,不幸的是,请参阅服务器-3518 https://jira.mongodb.org/browse/SERVER-3518)
  • 整数可以通过以下方式查询$gt / $lt这样您就可以有效地实施复杂的$or查询,尽管这是一个相当神秘的要求,并且没有什么问题$or查询...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储枚举 MongoDB 的相关文章

随机推荐

  • 正则表达式非贪婪是贪婪

    我有以下文字 tooooooooooooon 根据我正在读的这本书 当 跟在任何量词之后 它就变得非贪婪的 我的正则表达式to n仍在返回tooooooooooooon 它应该返回ton不应该吗 知道为什么吗 正则表达式只能匹配实际存在的文
  • 尝试注销 django 时出现运行时错误

    当我尝试从 django 项目注销时 出现以下错误 调用 Python 对象时超出最大递归深度 这是注销按钮的 URL url r logout users views logout name logout 这是视图 from django
  • 将自定义工具提示添加到 DataGrid 中的行

    我想自定义我的 DataGrid 以在所选行中显示工具提示 请参阅下面的模型图像以更好地了解我想要实现的目标 As it is at the moment Shows a single selected row 我多么愿意 显示选定的同一行
  • 复杂的 nHibernate QueryOver 表达式

    我在层次结构中有以下对象A gt B gt C gt D 每个对象都映射到一个表 我正在尝试使用 QueryOver 编写以下 SQL SELECT B FROM A B C D WHERE A ID B ID AND B ID C ID
  • 由于 ToList() 不起作用而返回视图

    我有这个代码 EmployeeEntities storeDB new EmployeeEntities public ActionResult Index var employee storeDB Employees ToList ToL
  • SQL Server 2005 执行MySQL REPLACE INTO?

    MySQL 有这个非常有用但专有的功能REPLACE INTOSQL 命令 这可以在 SQL Server 2005 中轻松模拟吗 开始一个新的事务 执行Select 然后要么UPDATE or INSERT and COMMIT总是有点痛
  • data.table 在非等价自连接上更新的奇怪行为

    在准备一个answer https stackoverflow com a 45781428 3817004对这个问题dplyr 或 data table 用于计算 R 中的时间序列聚合 https stackoverflow com q
  • Char* p 和 scanf

    我一直在尝试寻找以下代码失败的原因 但找不到 所以请原谅我的无知 让我知道这里发生了什么 include
  • 抛出异常返回服务器错误是否不好,例如。 404页面不存在?

    我正在开发 PHP 框架 目前正在设计错误处理 根据我在 SO 上读到的内容 我应该只在特殊情况下使用异常 因此 当输入错误的密码时抛出异常是错误的 当我想向用户返回服务器错误代码 例如 404 Page Not Found 时 是否应该避
  • 一个 $_GET 输入参数,它是一个数组

    我正在尝试将 3 个参数传递给脚本 其中第三个参数 GET value3 应该是一个数组 GET value1 GET value2 GET value3 an array of items 我这样调用脚本 注意我的语法value3 我不确
  • 如何对扩展 SqlMapClientDaoSupport 的 DAO 进行单元测试

    Spring DA 有助于编写 DAO 当使用iBATIS作为持久性框架并扩展SqlMapClientDaoSupport时 应该为DAO设置SqlMapClient模拟 但我不能这样做 SqlMapClientTemplate 不是一个接
  • 当我使用 Android Jetpack Compose 时,如何在 ViewModel 中设计 UI 状态类?

    我希望在 ViewModel 中设计 UI 状态类 以便在状态更改时启动 UI 重组 我读过一些示例项目 例如https github com android compose samples https github com android
  • 使用Java检索URL中的参数

    我有一个使用 XSL 和 XML 生成 PDF 的小 Servlet 因为我想通过 URL 指定文件 所以我需要从那里获取这些参数 localhost Servlet xml c xml test xml xsl c xsl test xs
  • 如何从 ASP 页运行 sqlcmd.exe?

    作为数据库修订控制 和自动安装 过程的一部分 我们需要能够在 ASP 页面内对各种 sql 文件运行 sqlcmd exe 我用来执行此操作的代码是 Dim cmd cmd sqlcmd S DATABASE SERVER U DATABA
  • 客户端程序验证 SSL_get_peer_certificate 返回的服务器证书?

    我有一个使用 C 编程语言中的 OpenSSL 的 SSL TLS 客户端程序 我正在寻找验证服务器证书的方法 X509 返回者SSL get peer certificate函数调用 另外 我还使用加载了自己的 CA 证书SSL CTX
  • MongoDB GetCollection 方法是否将整个集合加载到 RAM 或引用中? C#

    我有一个存储库类 用于处理 MongoDB 的所有数据库函数 这是构造函数的实现 public LocationRepository string connectionString if string IsNullOrWhiteSpace
  • 为什么“convert x.png y.png”会创建不同大小 (KB) 的图像?

    我有一些图像 我试图通过调整它们的大小来将它们标准化到一定的比例 当我开始调整图像大小时 我注意到它们的体积 KB 变得比原始图像大得多 我通过简单地执行以下操作进一步检查了它 转换 x png y png 并得到了一些差异 例如 在一种情
  • 通过 YouTube API 上传时,视频文件卡在 0%

    正如标题所示 视频文件可以通过 YouTube 的上传功能上传和处理 然而 当我尝试以编程方式上传它 通过 OAuth2 和 YouTube API v3 时 它总是陷入 0 的处理状态 SO 上有 youtubers 吗 有没有专门的论坛
  • 如何将项目添加到 NavigationView 中的菜单组

    在 Android 的文字游戏中 我目前有一个硬编码菜单 由left drawer menu xml并由 3 组组成 我的回合 对手的回合以及最后的其他内容 mLeftDrawer NavigationView findViewById R
  • 存储枚举 MongoDB

    我在 Mongo 数据库中存储每个用户的排名 管理员 版主 用户 和成就等枚举 据我所知 Mongo 没有枚举数据类型 这意味着我必须使用其他类型来存储它 我曾想过使用整数来存储它 我认为它比存储可以轻松表示为整数的所有内容的字符串占用的空