我在我的应用程序中使用_id
的嵌入式文档,例如:
> db.entities.findOne({}, {_id: 1})
{ "_id" : { "id" : "...", "type": "...", "servicePath" : "..." } }
有时,当子字段id
,type
和servicePath
的总长度过大时,我在尝试插入文档时会出现此类错误:
Btree::insert: key too large to index, failing orion.entities.$_id_ 1086
这很好,因为MongoDB有一个index key limit of 1024 bytes(_id
是强制索引):
索引条目的总大小(可能包括取决于BSON类型的结构开销)必须小于1024字节。
但是,我想在我的程序中设置一个检查,以提前防止此错误。我的意思是,检查这种情况是否发生:
length(id) + length(type) + length(servicePath) + structural overhead > 1024
如何知道"结构性开销"在这种情况下?它是常量还是取决于特定的id / type / servicePath?