设置复合索引时出错

时间:2013-05-14 17:56:33

标签: mongodb

我想在我的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_"
    }
]

它对我来说看起来不像是重复的关键。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

MongoDB告诉您,您有多个文档(多个)具有相同的fb_idts值,null值。换句话说,有些文档没有fb_idts字段。因此,它违反了整个集合中的唯一约束。

作为一种解决方法,您应该查看sparse索引。从文档引用:

  

稀疏索引仅包含具有该文件的文档的条目   索引字段。缺少该字段的任何文档都不是   索引。索引是“稀疏的”,因为文件丢失时   价值观缺失。

另见:

希望有所帮助。