我试图索引主集合使用散列分片的嵌入式文档。 样本结构:
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上实现这种索引?
答案 0 :(得分:0)
'独特' MongoDB文献中的createIndex选项说:"该选项不适用于散列索引" createIndex Options
因此,如果您在创建索引时删除了选项:{' unique':True},则不会再出现此错误。
答案 1 :(得分:0)
我可以通过将分片键实际包含在唯一索引本身中来使其工作。