26

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

1)使用空字符串和空字符串之间有什么优缺点吗?

2) 如果我将 value 设置为 undefined 以从现有文档中删除属性,而不是将属性值设置为空字符串或 null,是否有任何利弊?

谢谢

4

3 回答 3

19

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

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

var UserSchema = new Schema({
email: { type: String, set: deleteEmpty } 
});
于 2013-09-04T06:09:17.290 回答
7

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

于 2013-09-04T05:58:52.457 回答
7

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

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

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

于 2013-09-04T07:15:42.537 回答