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

标签 mongodb mongodb-query document-database nosql

在我看来,当您创建 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 或空。如果您不需要,您可以删除此字段。

关于mongodb - 在 MongoDB 中存储 null 与根本不存储 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12403240/

相关文章:

azure-cosmosdb - 嵌套对象的 Cosmos DB SQL 查询

mongodb - Map Reduce Mongodb Node JS 原生驱动

node.js - 如何使用 Node、Async 和 Mongoose 计算作用域变量的总和?

regex - MongoDB,通过正则表达式对索引字段的查询性能

MongoDB 在数组中查找元素(子文档)

json - 设计数据结构

Node.js Passport 在登录时未进行身份验证

mongodb - 无法重新启动 mongod.service : Unit mongod. 找不到服务

mongodb - 使用 let 变量的管道和 geoIntersect 查找

graphql - 在ravendb中创建新文档时,元数据中缺少集合名称,并且该文档被标记在@empty集合下