我的文档包含slugID
和parentID
属性:
{
slugID: <string>, // optional
parentID: <ObjectID>,
...
}
基本上,slugID
可以在URL中使用,而parentID
是父资源(URL中的父资源)。
但是,并非所有资源都有slugID
,在这种情况下,文档中不存在此属性。
顺便说一句,我想在同一个父级的子级中强制执行slug的唯一性(因此可以解析URL以查找唯一的资源/文档)。
当然,我想出了一个带有选项{ slugID: 1, parentID: 1}
的复合索引{ sparse: true, unique: true }
。
但令人惊讶的是,稀疏索引在复合索引上的行为不应该如此:如果索引的 ANY 属性存在,它将被索引(期待:if < em> ANY 属性丢失,未编入索引。
就我而言,parentID
始终是定义的,但slugID
不是强制性的,因此每当两个文档没有{{1}时,我就会收到重复键错误对于同一个父母......
那么......解决方法是什么? (编辑:在这个问题中,如果slugID存在,我关注(slugID,parentID)元组的唯一性)。
我只有应用程序端解决方案,但没有一个真正让我满意。
PS:我知道还有其他类似的问题(复合,稀疏和唯一索引),但解决方法并不适合我的用例。
PS2:违规查询:
slugID