mongoDB 3.2中的唯一索引忽略空值

时间:2016-03-02 18:47:54

标签: mongodb indexing database

我想在字段中添加唯一索引,忽略唯一索引字段中的空值,并忽略基于partialFilterExpression过滤的文档。

问题是稀疏索引不能与Partial索引一起使用。

此外,添加唯一索引会将空值添加到索引键字段,因此无法根据PartialFilterExpression中的$ exist条件忽略文档。

MongoDB 3.2是否有可能解决这种情况?

4 个答案:

答案 0 :(得分:24)

我正在寻找一个解决方案而没有找到一个解决方案。这可能无法回答这个问题,也可能不是,但会像我一样帮助很多其他人。

实施例。如果null的字段为houseName且类型为string,则解决方案可以是这样的

db.collectionName.createIndex(
   {name: 1, houseName: 1},
   {unique: true, partialFilterExpression: {houseName: {$type: "string"}}}
);

这会忽略字段null中的houseName值,但仍然是唯一的。

答案 1 :(得分:5)

是的,你可以在MongoDB 3.2中创建部分索引

请参阅https://docs.mongodb.org/manual/core/index-partial/#index-type-partial

MongoDB建议在稀疏索引上使用部分索引。我建议你放弃稀疏指数,转而支持部分索引。

答案 2 :(得分:2)

您可以在mongo:3.2中创建部分索引。 例如,如果ipaddress可以为“”,但“ 127.0.0.1”应该是唯一的。解决方案可以是这样的:

db.collectionName.createIndex(
 {"ipaddress":1},
 {"unique":true, "partialIndexExpression":{"ipaddress":{"$gt":""}}})

这将忽略ipaddress字段中的“”值,并且仍然是唯一的

答案 3 :(得分:0)

{ “ YourField”:{ “ $ exists”:是的, “ $ gt”:“ 0”, “ $ type”:“字符串” } }