在我看来,当你创建一个Mongo文档,并且有一个字段{key: value},而这个字段有时不会有值时,你有两个 Select :

  1. 写入{key: null},即在字段中写入空值
  2. 根本不要在那个文档中存储密钥

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

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

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

EDIT

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

推荐答案

事实上,你还有第三种可能性:

你忘记了空值的特殊性.

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

回到你的确切问题上来,这取决于你的查询和数据代表什么.

Mongodb相关问答推荐

如何限制/筛选子文档中的条目?

在mongdob中按子文档筛选不起作用

如何在 MongoDB 中的集合下查找同一文档

MongoDB 根据最新日期查询多个不同的值

如何在 mongodb 查找的外键中使用正则表达式

如何为具有相同名称的嵌套字段创建文本索引

MongoDB:通过嵌套数组中的最后一个元素值获取文档

如何在 Mongoose 中定义一个通用的嵌套对象

如何使用sailsjs v0.10连接mongodb?

使用 MongoDB 更新数组字段内的特定键/值

.NET 中的 Mongodb 单元测试

ExpressJS & Mongoose REST API struct :最佳实践?

请按语法排序 Mongoid Scope

如何解决 ClassNotFoundException:com.mongodb.connection.BufferProvider?

使用 MongoDB 进行嵌套分组

使用 Java 驱动程序更新 MongoDB 中的数组

mongodb类型更改为数组

mongo dbname --eval 'db.collection.find()' 不起作用

用 MongoDB 中的属性表示多对多关系的最佳模型

mongodb & max connections最大连接数