MongoDB空字符串值vs空值

Nam*_*yen 19 mongoose mongodb

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

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

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

谢谢

sle*_*dav 14

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

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

var UserSchema = new Schema({
email: { type: String, set: deleteEmpty } 
});
Run Code Online (Sandbox Code Playgroud)


小智 6

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


Sam*_*aye 6

这个问题我已经回答了至少 4 次,谷歌搜索会给你很多信息。

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

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