我使用
创建一个简单的集合db.getCollection("types").insert({
"domainId": "type",
});
db.getCollection("types").insert({
"domainId": "view",
});
db.getCollection("types").insert({
"domainId": "vfsdata",
"namespace": "eportal",
});
db.getCollection("types").insert({
"domainId": "admin",
"namespace": "eportal",
});
正如预期的那样,以下查询将返回所有文档:
> db.types.find( { "$or" : [ { "namespace" : "eportal"} , { "namespace" : null }] } )
{ "_id" : ObjectId("538602b59b6fe0b5efcf8c13"), "domainId" : "type" }
{ "_id" : ObjectId("538602b59b6fe0b5efcf8c14"), "domainId" : "view" }
{ "_id" : ObjectId("538602b59b6fe0b5efcf8c15"), "domainId" : "vfsdata", "namespace" : "eportal" }
{ "_id" : ObjectId("538602b59b6fe0b5efcf8c16"), "domainId" : "admin", "namespace" : "eportal" }
现在我用
添加一个索引db.types.ensureIndex( { namespace: 1, domainId: 1 }, { unique: 1 } )
在此之后,与上述相同的查询仅返回2个文档:
> db.types.find( { "$or" : [ { "namespace" : "eportal"} , { "namespace" : null }] } )
{ "_id" : ObjectId("538602b59b6fe0b5efcf8c13"), "domainId" : "type" }
{ "_id" : ObjectId("538602b59b6fe0b5efcf8c14"), "domainId" : "view" }
我对此行为没有任何解释。谁能解释一下呢?
答案 0 :(得分:0)
请参阅具有唯一约束的sparse indexes
手册条目。我想你会想要这样做:
db.types.ensureIndex(
{ namespace: 1, domainId: 1 },
{ unique: true, sparse: true }
)