MongoDB空字符串值vs空值

时间:2013-09-04 05:51:40

标签: mongodb mongoose

在MongoDB生产中,如果键的值为空或未提供(可选),我应该使用空字符串值还是应该使用null作为值。

1)使用空字符串与null之间是否有任何利弊?

2)如果我将值设置为undefined以从现有doc中删除属性vs将属性值设置为空字符串或null,是否有任何优缺点?

由于

3 个答案:

答案 0 :(得分:14)

我认为最好的方法是未定义的,因为我建议不要完全包括这个密钥。 Mongo不能用作SQL,你必须在每列中至少为null。如果您没有价值,只需不要包含密钥。然后,如果您查询所有文档,此键不存在,它将正常工作,否则不会。此外,如果您不使用密钥,则可以节省一点磁盘空间。这是Mongo的正确方法。

function deleteEmpty (v) {
   if(v==null){
     return undefined;
   }
   return v;
}

var UserSchema = new Schema({
email: { type: String, set: deleteEmpty } 
});

答案 1 :(得分:6)

我会说null表示没有值,空字符串表示值在那里,但是它是空的。 在读取数据时,您可以区分空白值和不存在的值。 仍然取决于你的用例

答案 2 :(得分:3)

此问题至少已被我回答过4次,Google搜索会为您提供大量信息。

您必须考虑删除密钥的方法。如果你的文档最终会在应用程序中的大部分定义状态下使用该模式,那么你可能会看到文档的大量移动,这就是没有这些键的好处:空间。你将在空间中保存的那几个字节将变得无用,你将获得瑞士奶酪效果。

但是,如果您根本不使用这些字段,那么在您的工作集中包含数百万个文档的少量额外字节可能会导致实际问题无法存在(如果您出于某种原因想要将那么多文档推入您的工作集),至于空间问题,MongoDB从根本上来说有一个空间问题,我还没有真正知道省略了几个键来做任何事情来帮助它。