我想在字段中添加唯一索引,忽略唯一索引字段中的空值,并忽略基于partialFilterExpression过滤的文档。
问题是稀疏索引不能与Partial索引一起使用。
此外,添加唯一索引会将空值添加到索引键字段,因此无法根据PartialFilterExpression中的$ exist条件忽略文档。
MongoDB 3.2是否有可能解决这种情况?
答案 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”:“字符串” } }