在排序方法的字段名称中使用点符号时,PyMongo 会出错

PyMongo gives error when using dot notation in field name for sort method

我正在尝试获取集合中某个字段的最大值。该字段的值是一个数组,我实际上需要获取数组第一个索引的最大值。例如集合类似这样:

[
    {
        ...,
        "<field>": [10, 20],
        ...
    },
    {
        ...,
        "<field>": [13, 23],
        ...
    },
    {
        ...,
        "<field>": [19, 31],
        ...
    }
]

所以从上面的文档中,我需要得到数组第一个索引的最大值。在这种情况下,它将是 19.

为此,我首先按字段数组的第一个索引对字段进行排序,然后获取第一个文档(使用限制)。我可以使用 Node.js 执行此操作,但无法使用 PyMongo。

它可以使用 Node.js MongoDB API 像:

const max = (
    await collection
      .find()
      .sort({ "<field>.0": -1 })
      .limit(1)
      .toArray()
)[0];

但是,如果我尝试使用 PyMongo 做类似的事情:

max = list(collection.find().sort("<field>.0", -1).limit(1))[0]

我收到错误:

KeyError: '<field>.0'

我使用的是 PyMongo 版本 3.12.0。我该如何解决?

在 PyMongo 中,排序选项是一个元组列表,其中元组接受两个参数:key namesort-order

您可以将多个元组传递给此列表,因为 MongoDB 支持按多个关键条件排序。

col.find({}).sort([('<key1>', <sort-order>), ('<key2>', <sort-order>)])

在您的方案中,您应该按如下方式替换查找命令:

max = list(collection.find().sort([("<field>.0", -1)]).limit(1))[0]