Mongodb 无法在{EDs.\u id:1}上创建具有分片键模式{u id:“hashed”的唯一索引

Mongodb 无法在{EDs.\u id:1}上创建具有分片键模式{u id:“hashed”的唯一索引,mongodb,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 = Embedded

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

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中删除这个meta时,它就工作了。当我移除碎片时,它也起作用。
那么,我们如何在嵌入式文档ED的id上实现这种索引呢?

MongoDB文献中createIndex的“唯一”选项说:“该选项不适用于哈希索引”


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

我能够通过在唯一索引本身中实际包含shard键来实现这一点

你可能应该提供更多的信息。我甚至不认识代码的类型。对于有关MongoDB的问题,shell语法和BSON文档提高了获得有用答案的可能性。这是Python吗?一些背景知识会有所帮助