mongodb 2.6.1:添加索引更改结果集

时间:2014-05-28 15:44:10

标签: mongodb mongodb-query

我使用

创建一个简单的集合
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" }

我对此行为没有任何解释。谁能解释一下呢?

1 个答案:

答案 0 :(得分:0)

请参阅具有唯一约束的sparse indexes手册条目。我想你会想要这样做:

db.types.ensureIndex(
  { namespace: 1, domainId: 1 },
  { unique: true, sparse: true }
)