【发布时间】:2021-04-15 08:35:18
【问题描述】:
在 mongo 4.4.3 中,我正在为数组创建一个唯一且稀疏的索引:
db.test.createIndex( { "array": 1 }, { unique: true, sparse: true } )
我用一些测试数据填充它:
db.test.insert({})
db.test.insert({array:[]})
db.test.insert({array:[ "a" ]})
db.test.insert({array:[ "b" ]})
db.test.insert({array:[ "c", "d" ]})
现在我会期待以下内容:
db.test.insert({array:[ "a" ]}) #FAIL
db.test.insert({array:[ "b" ]}) #FAIL
db.test.insert({array:[ "c" ]}) #FAIL
db.test.insert({array:[ "d" ]}) #FAIL
db.test.insert({}) #SUCCESS
db.test.insert({array:[]}) #SUCCESS
相反,我得到:
db.test.insert({array:[ "a" ]}) #FAIL
db.test.insert({array:[ "b" ]}) #FAIL
db.test.insert({array:[ "c" ]}) #FAIL
db.test.insert({array:[ "d" ]}) #FAIL
db.test.insert({}) #SUCCESS
db.test.insert({array:[]}) #FAIL
问题是:
"E11000 duplicate key error collection: db.test index: array_1 dup key: { array: undefined }"
空数组似乎被视为undefined - 但为什么 sparse 会被忽略?
有没有办法获得我预期的行为(不影响性能)?
【问题讨论】: