我想在我的mongoDB中设置fb_id和ts的复合索引。所以,我做了:
PRIMARY> db.sessions.ensureIndex( { fb_id: 1, ts: 1 }, { unique:true } );
但我收到了以下错误:
E11000 duplicate key error index: tracking.sessions.$fb_id_1_ts_1 dup key: { : null, : null }
所以我使用db.sessions.getIndexes()
检查了这个集合中的索引,得到了:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "tracking.sessions",
"name" : "_id_"
}
]
它对我来说看起来不像是重复的关键。我在这里做错了什么?
答案 0 :(得分:2)
MongoDB告诉您,您有多个文档(多个)具有相同的fb_id
和ts
值,null
值。换句话说,有些文档没有fb_id
和ts
字段。因此,它违反了整个集合中的唯一约束。
作为一种解决方法,您应该查看sparse索引。从文档引用:
稀疏索引仅包含具有该文件的文档的条目 索引字段。缺少该字段的任何文档都不是 索引。索引是“稀疏的”,因为文件丢失时 价值观缺失。
另见:
希望有所帮助。