MongoDB复合稀疏索引

时间:2017-08-14 13:14:42

标签: mongodb compound-index

我有一个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"});

没关系。现在,如果name为null(或不存在),我想添加多个具有相同父级的文档(如稀疏单个索引)。它可以吗? 例如:

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 个答案:

答案 0 :(得分:3)

您可以通过为您的唯一索引定义partial filter expression来执行此操作:

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

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