0

我有一个用例,其中存储由以下内容组合而成的 _id 将非常有用:

  1. 96 位整数
  2. 96 位整数
  3. 96 位整数对象 ID

这相当于一个 36 字节的 ASCII 字符串。它将被字节反转成为大端。

我想查询“给我所有 _id 以 {1} 连接 {2} 开头的文档。” 这将返回 _id 与上面的组件 1 和 2 匹配的文档,其中包含任何 3。

是的,这是一种 Cassandra 方法。我剩下的查询只能在 MongoDB 中实际完成。

我怎样才能做到这一点?

作为参考,我使用的是 C#。

4

1 回答 1

1

将 ID 保存为 36 字节的 ascii 字符串后,您可以使用正则表达式匹配来查找索引中的前缀子字符串。

在 MongoDB 中有效使用带有正则表达式的索引的注意事项是:

  • 正则表达式匹配应该是左根的(这将是您的“_id 以”搜索的情况)
  • 索引区分大小写

查询类似于:

/* 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)
于 2012-09-11T06:08:38.480 回答