无法使用分片键模式在{EDs._id:1}上创建唯一索引{_id:" hashed" }

时间:2016-03-11 13:49:14

标签: mongodb

我试图索引主集合使用散列分片的嵌入式文档。 样本结构:

class ED(EmbeddedDocument):
    id = StringField(primary_key=true)
    meta = {
        'indexes': [{'fields': ['EDs.id'], 'unique': True}]
    }

class D(Document):
    id = StringField(primary_key=true)
    EDs = EmbeddedDocumentListField(ED)

现在,我在集合D中添加了分片。

sh.shardCollection("db.d", { "_id" : "hashed" } )

既然我已经在ED的id上添加了索引,就不允许我保存文档。

$cmd failed: cannot create unique index over { EDs._id: 1 } with shard key pattern { _id: "hashed" }

但是,当我们从ED中移除此元时,它可以工作。当我删除分片时它也有效。 那么,我们如何才能在嵌入式文档ED的id上实现这种索引?

2 个答案:

答案 0 :(得分:0)

'独特' MongoDB文献中的createIndex选项说:"该选项不适用于散列索引" createIndex Options

因此,如果您在创建索引时删除了选项:{' unique':True},则不会再出现此错误。

答案 1 :(得分:0)

我可以通过将分片键实际包含在唯一索引本身中来使其工作。