mongoDB可以比较字段名而不是字段值吗?

Chr*_*ank 5 mongodb mongo-java

当定义要返回的字段时(collection.find(q, fields)),mongoDB是否(如何)支持比较字段名称(而不是值)?

例如,根据字段名称选择一系列字段,而不考虑其值。

假设文档中有以下字段(无论值是什么):

fieldA000 fieldA001 fieldA002 fieldB000 fieldB001 fieldC000 ...
Run Code Online (Sandbox Code Playgroud)

我想限制任何字段名称匹配的返回字段fieldA000 to fieldA999(无需明确定义任何字段名称)或fieldA.*(reg ex)或类似的。

PS:我目前正在评估是否可以使用 mongoDB 而不是 Cassandra,其中列范围/切片选择以非常易于使用的方式提供。

pau*_*kow 3

Mongo 没有办法在键名称上使用正则表达式来匹配文档。

但是,您可以这样做$where,让您使用执行 JavaScript 来选择每个文档。缺点$where是它无法利用索引,因此需要反序列化集合中的每个文档,这对于大多数应用程序来说可能太慢。

在 Mongo 中执行此操作的另一种方法是使用$existsand ,$or但它需要显式的键名称。

像这样的模式对于这种类型的查询来说会更有效,并且还有助于使用以下方式在服务器上进行切片$

{
    dataFields: [
        { id: 'A000', value: 'whatevs' },
        { id: 'A001', value: 'whatevs' },
        { id: 'A002', value: 'whatevs' },
        { id: 'B000', value: 'whatevs' },
        { id: 'B001', value: 'whatevs' },
        { id: 'C000', value: 'whatevs' },
    ]
}
Run Code Online (Sandbox Code Playgroud)

或者:

{
    dataFields: [
        { lettter: 'A', number: 0, value: 'whatevs' },
        { lettter: 'A', number: 1, value: 'whatevs' },
        { lettter: 'A', number: 2, value: 'whatevs' },
        { lettter: 'B', number: 0, value: 'whatevs' },
        { lettter: 'B', number: 1, value: 'whatevs' },
        { lettter: 'C', number: 0, value: 'whatevs' },
    ]
}
Run Code Online (Sandbox Code Playgroud)