MongoDB 复合稀疏索引
MongoDB compound sparse indexes
我有一个复合索引:
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"});
您可以通过为您的唯一索引定义一个 partial filter expression 来做到这一点:
db.nodes.createIndex(
{ parent: 1, name: 1 },
{ unique: true,
partialFilterExpression: {
name: {$exists: true}
}
});
过滤器表达式从唯一索引中排除没有 name
的文档。
我有一个复合索引:
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"});
您可以通过为您的唯一索引定义一个 partial filter expression 来做到这一点:
db.nodes.createIndex(
{ parent: 1, name: 1 },
{ unique: true,
partialFilterExpression: {
name: {$exists: true}
}
});
过滤器表达式从唯一索引中排除没有 name
的文档。