在排序方法的字段名称中使用点符号时,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 name
和 sort-order
。
您可以将多个元组传递给此列表,因为 MongoDB 支持按多个关键条件排序。
col.find({}).sort([('<key1>', <sort-order>), ('<key2>', <sort-order>)])
在您的方案中,您应该按如下方式替换查找命令:
max = list(collection.find().sort([("<field>.0", -1)]).limit(1))[0]
我正在尝试获取集合中某个字段的最大值。该字段的值是一个数组,我实际上需要获取数组第一个索引的最大值。例如集合类似这样:
[
{
...,
"<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 name
和 sort-order
。
您可以将多个元组传递给此列表,因为 MongoDB 支持按多个关键条件排序。
col.find({}).sort([('<key1>', <sort-order>), ('<key2>', <sort-order>)])
在您的方案中,您应该按如下方式替换查找命令:
max = list(collection.find().sort([("<field>.0", -1)]).limit(1))[0]