MongoDB 复合稀疏索引

Posted

技术标签:

【中文标题】MongoDB 复合稀疏索引【英文标题】:MongoDB compound sparse indexes 【发布时间】:2018-01-22 08:14:31 【问题描述】:

我有一个followig复合索引:

db.nodes.createIndex(  parent: 1, name: 1 ,  unique: true  );

该索引禁止插入两个具有相同名称和父级的文档 例如:

var n=db.nodes;
n.insert(parent:0,name:"node");
n.insert(parent:0,name:"node1");
n.insert(parent:0,name:"node2");
n.insert(parent:0,name:"node3");
//throws an error because of compound index:
n.insert(parent:0,name:"node");

没关系。现在,如果名称为空(或不存在),我想添加多个具有相同父级的文档(例如通过稀疏单个索引)。有可能吗? 示例:

n.insert(parent:0,otherattr:"test");
//throws an error because the tupel parent:0,name:null already exists
 n.insert(parent:0,otherattr2:"test");

【问题讨论】:

【参考方案1】:

您可以通过为您的唯一索引定义 partial filter expression 来做到这一点:

db.nodes.createIndex(
     parent: 1, name: 1 , 
     unique: true,
      partialFilterExpression: 
        name: $exists: true
       
    );

过滤器表达式从唯一索引中排除没有name 的文档。

【讨论】:

以上是关于MongoDB 复合稀疏索引的主要内容,如果未能解决你的问题,请参考以下文章

具有稀疏复合索引的 MongoDB $near 地理空间查询错误 13311

MongoDB——索引属性之稀疏索引(Sparse Indexes)

MongoDB——索引属性之稀疏索引(Sparse Indexes)

MongoDB Indexes

MongoDB——索引类型之复合索引(Compound Index)

MongoDB——索引类型之复合索引(Compound Index)