我有一个用例,其中存储由以下内容组合而成的 _id 将非常有用:
- 96 位整数
- 96 位整数
- 96 位整数对象 ID
这相当于一个 36 字节的 ASCII 字符串。它将被字节反转成为大端。
我想查询“给我所有 _id 以 {1} 连接 {2} 开头的文档。” 这将返回 _id 与上面的组件 1 和 2 匹配的文档,其中包含任何 3。
是的,这是一种 Cassandra 方法。我剩下的查询只能在 MongoDB 中实际完成。
我怎样才能做到这一点?
作为参考,我使用的是 C#。
我有一个用例,其中存储由以下内容组合而成的 _id 将非常有用:
这相当于一个 36 字节的 ASCII 字符串。它将被字节反转成为大端。
我想查询“给我所有 _id 以 {1} 连接 {2} 开头的文档。” 这将返回 _id 与上面的组件 1 和 2 匹配的文档,其中包含任何 3。
是的,这是一种 Cassandra 方法。我剩下的查询只能在 MongoDB 中实际完成。
我怎样才能做到这一点?
作为参考,我使用的是 C#。
将 ID 保存为 36 字节的 ascii 字符串后,您可以使用正则表达式匹配来查找索引中的前缀子字符串。
在 MongoDB 中有效使用带有正则表达式的索引的注意事项是:
查询类似于:
/* Assumption: comp1 and comp2 are ASCII string representations
that can be combined for a key prefix */
var spec = new Document("_id", new MongoRegex(string.Format("^{0}{1}", comp1, comp2)));
collection.Find(spec)