MongoDB重复键:{:空值}

db2dz4w8  于 2022-11-22  发布在  Go
关注(0)|答案(3)|浏览(68)

我没有太多MongoDB的经验,但我在使用一个mLab示例时遇到了以下问题:
E11000 duplicate key error index: development.users.$key_1 dup key: { : null } MongoError: E11000 duplicate key error index: development.users.$key_1 dup key: { : null }
我试过按key字段排序,寻找null键,但不知道该如何找到重复的null键。困难之处在于我甚至不知道该在Google或堆栈溢出中搜索什么来解决这个问题。任何帮助都将不胜感激,以下是完整的错误:

Mongoose model 'index-single-done' event fired on 'Family' for index:
Object {key: 1}

With error:
    E11000 duplicate key error index: development.users.$key_1 dup key: { : null } MongoError: E11000 duplicate key error index: 
development.users.$key_1 dup key: { : null }
at Function.MongoError.create (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/error.js:31:11)
at /Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/pool.js:497:72
at authenticateStragglers (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/pool.js:443:16)
at Connection.messageHandler (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/pool.js:477:5)
at Socket.<anonymous> (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/connection.js:333:22)
at Socket.emit (events.js:180:13)
at Socket.emit (domain.js:422:20)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at Socket.Readable.push (_stream_readable.js:218:10)
at TCP.onread (net.js:581:20)
Mongoose model 'index' event fired on 'Family' with error:
E11000 duplicate key error index: development.users.$key_1 dup key: { : null } MongoError: E11000 duplicate key error index: development.users.$key_1 dup key: { : null }
at Function.MongoError.create (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/error.js:31:11)
at /Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/pool.js:497:72
at authenticateStragglers (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/pool.js:443:16)
at Connection.messageHandler (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/pool.js:477:5)
at Socket.<anonymous> (/Users/myUserName/development/projectName/node_modules/mongodb-core/lib/connection/connection.js:333:22)
at Socket.emit (events.js:180:13)
at Socket.emit (domain.js:422:20)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at Socket.Readable.push (_stream_readable.js:218:10)
at TCP.onread (net.js:581:20)
j13ufse2

j13ufse21#

我遇到了同样的问题
我已经尝试了不同的技术,无论是寻找数据库验证或数据库值,但没有发现无效,可能会产生这种错误。
最后删除了集合,问题解决了。虽然不是很好的解决方案,但在测试阶段还可以。

vnjpjtjt

vnjpjtjt2#

duplicate key error index: development.users.$key_1 dup key: { : null }
这意味着您的key字段设置为仅接受唯一值,并且已经有一个key的记录具有null值,您不能插入另一个keynull的文档。这类似于SQL数据库中的主键。
检查mongoose模式,因为它看起来像您正在使用mongoose。
最有可能的是:
1.保存记录时,您没有传递密钥
1.如果您正在传递key,则其值为null

1szpjjfi

1szpjjfi3#

假设您有一个集合,其中某个字段的唯一索引设置为true。然后您在该集合中添加一个文档,但该文档中缺少该唯一索引字段。然后插入该文档,并使用该文档索引的空值更新该集合的索引。
此后,当您尝试将缺少此字段的更多文档添加到同一集合中时,先前的空值与新文档的空值发生冲突,并出现dup key: { <KEY>: null }错误。
若要避免这种情况,可以将索引设置为稀疏索引。稀疏索引仅在存在可用值(非空值)时才存储要索引的数据,否则该字段将不被索引。
PS:如果您遇到此错误,然后添加稀疏,仍然得到相同的错误,那么您可能需要先删除现有索引,然后重新索引以摆脱旧的索引值。

相关问题