mongodb - 在 MongoDB 中存储 null 与根本不存储 key

在我看来,当您创建 Mongo 文档并有一个字段 {key: value} 有时不会有值时,您有两个选择:

  1. 写入 {key: null} 即在字段中写入 null 值
  2. 根本不要将 key 存储在该文档中

这两个选项都很容易查询,一个是查询 {key : null},另一个是查询 {key : {$exists : false}}

我真的想不出这两个选项之间有什么区别会对应用场景产生任何影响(除了选项 2 的存储空间稍少)。

谁能告诉我是否有任何理由让人们更喜欢这两种方法中的任何一种,为什么?

编辑

在问了这个问题后,我还想到索引在这两种情况下的行为可能不同,即可以为选项 2 创建一个稀疏索引。

最佳答案

确实,您还有第三种可能性: key: ""(空值)

你忘记了关于空值的特殊性。 查询 key: null 将检索所有 key 为 null 的文档,其中 key 不存在。

当对 $exists:false 的查询将只检索字段键不存在的文档。

要回到您的确切问题,这取决于您的查询和数据代表的内容。 如果您需要保留它,例如,用户设置了一个值然后取消设置它,您应该将该字段保留为 null 或空。如果您不需要,您可以删除此字段。

https://stackoverflow.com/questions/12403240/

相关文章:

java - 为什么 Casbah/Java MongoDB 驱动程序会出现 java.lang.I

mongodb - 如何修复我的mongodb?

c# - 如何通过 .NET 在 MongoDB 中创建索引

node.js - Redis 缓存和 Mongo 的持久性架构

mongodb - 选择 MongoDb/CouchDb/RavenDb - 性能和可扩展性建议

javascript - Meteor 文档中的消息计数示例如何工作?

mongodb - 在 MongoDb 中按 15 分钟的时间间隔对结果进行分组

mongodb - EventStore 与 MongoDb

mongodb - 如何对 MongoDB 集合中所有文档的键值求和

javascript - Mongoose 查找/更新子文档