MongoDB 使用 DBRef 字段分片键?

MongoDB Sharding Key with DBRef field?

我有一个包含根文档 DBRef 的集合。我有数以万计的文档 link 到我的数据集合中的单个根文档。 这就是为什么我选择不嵌套根文档的数据。

Data Collection:
    _id : Auto-Created ID
    ts : TimeStamp 
    field_1 : Whatever
    ...
    field_n : Whatever 
    root : DBRef

"Root" Document Collection:
    _id: Filename (unique)
    field_1 : Whatever
    ...
    field_n : Whatever 

我认为对我的集合进行分片的最佳方法是使用字段 tsroot._id 作为复合键。

这可能吗?如果没有,最好的解决方案是什么?只需将 root._id 字段复制到数据集合中的普通字段中?

为了回答我自己的问题,这是我发现的:

显然,这是不可能的,因为在后续查询中必须在客户端检索所有 DBRef。

我摄取了一个新字段 sh_key,它是在应用程序端导入数据时即时创建的。新字段将保存 "compound sharding key" 的值。

该值是 root._id 值以及 ts 的小时以 {root._id}:{hour of ts} 的形式串联而成。