使用 Pymongo 从 Mongodb 中的 Sql 转换“distinct on”查询
Posted
技术标签:
【中文标题】使用 Pymongo 从 Mongodb 中的 Sql 转换“distinct on”查询【英文标题】:Conver "distinct on" query from Sql in Mongodb with Pymongo 【发布时间】:2021-04-22 15:27:59 【问题描述】:我正在尝试从sql
转换此查询:
select distinct on (id13) id13, timestamp1
from oneindextwocolumnsfalse3years
where timestamp1>='2010-01-01 00:00:00' and timestamp1<='2015-01-01 00:55:00'
order by id13,timestamp1 desc
像这样给mongodb
:
mydb1.mongodbindextimestamp1.aggregate([
"$match":
"timestamp1": "$gte": datetime.strptime("2010-01-01 00:00:00", "%Y-%m-%d %H:%M:%S"),
"$lte" :datetime.strptime("2015-01-01 00:55:00", "%Y-%m-%d %H:%M:%S")
,
"$group":
"_id":
"id_13":"$id13"
,
,
"$project":
"_id": 0,
"id13":1,
"timestamp1":1
,
"$sort": "id13": 1,"timestamp1":-1
])
但它似乎不起作用。你有什么建议吗?我做错了什么,但我找不到什么!
【问题讨论】:
【参考方案1】:试试这个管道:
db.collection.aggregate(
[
$match:
timestamp:
$gte: ISODate("2020-01-01"),
$lte: ISODate("2022-01-01")
,
$group:
_id: "$id13", //define the grouping key
doc: $first: "$$ROOT" //pick the first doc from each group
,
$replaceWith: "$doc" //promote the doc to root
,
$project:
_id: 0,
id13: "$id13",
timestamp: "$timestamp"
,
$sort:
id13: 1,
timestamp: -1
]
)
https://mongoplayground.net/p/Cwzic2cMfgd
【讨论】:
。感谢您的回答。$replacewith 会改变我数据库中的任何内容吗? @xaroulisgekas$replaceWith
不会更改数据库中的任何内容。如果您转到我发布的 mongoplayground 链接,该查询确实有效。但是,我错误地使用了字段名称 timestamp
而不是您的 timestamp1
。只需重命名它,它应该可以在您的数据库上运行。以上是关于使用 Pymongo 从 Mongodb 中的 Sql 转换“distinct on”查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PyMongo 基于 Flask URL 变量检索 MongoDB 中的记录?
pymongo:如何从 mongodb 的字段中获取多个结果?