gpt4 book ai didi

MongoDB 无法创建唯一稀疏索引(重复键)

转载 作者:行者123 更新时间:2023-12-03 01:01:53 25 4
gpt4 key购买 nike

我想在两列上创建一个唯一索引,其中索引应允许索引的第二部分有多个空值。但是:

db.model.ensureIndex({userId : 1, name : 1},{unique : true, sparse : true});

抛出重复键异常:E11000重复键错误索引:devmongo.model.$userId_1_name_1 dup key: { : "-1", : null }。我认为由于稀疏 = true 选项索引应该允许这个星座?我怎样才能实现这个目标?我使用 MongoDB 2.6.5

最佳答案

如果存在任何字段,稀疏复合索引将为文档创建索引条目,并将索引中的值设置为null对于文档中不存在的任何字段。换句话说:如果文档中缺少所有索引字段,稀疏复合索引只会跳过该文档。

从 v3.2 开始,partial indexes可以用来完成您想要做的事情。您可以使用:

db.model.ensureIndex({userId : 1, name : 1}, { partialFilterExpression: { name: { $exists: true },  unique: true });

它只会索引具有 name 字段的文档。

注意: mongo 无法使用此索引来处理 userId 的查询,因为它不会包含集合中的所有文档。此外,文档中的 null 被视为一个值,并且具有 null 值的字段存在

关于MongoDB 无法创建唯一稀疏索引(重复键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26711235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com