如何使用 SQL 查询从 mongoDB 获取每分钟的最后一秒
Posted
技术标签:
【中文标题】如何使用 SQL 查询从 mongoDB 获取每分钟的最后一秒【英文标题】:How to get last second of every minute from mongoDB using SQL query 【发布时间】:2019-12-06 17:20:01 【问题描述】:我有一个表格,每毫秒都有记录。我只需要使用 Mongodb sql 查询获取每分钟的最后一秒。
Id Balance DataTime
1 "2462188.61" 2019-09-27T05:49:33.575+00:00
1 "2449426.30" 2019-10-30T19:30:52.513+00:00
1 "2456459.67" 2019-10-15T18:20:09.490+00:00
5 "1006266.91" 2019-10-31T13:48:18.290+00:00
我尝试了 LIKE 条件,但没有成功。Select Id, DateTime,Balance from AccountBalance where DateTime like '%59.000%'
这里是 mongoldb SQL 参考的链接: https://docs.mongodb.com/bi-connector/current/supported-operations/
我正在使用 BI 连接器连接到 Tableau(因此需要查询的 sql 版本)
提前致谢!
【问题讨论】:
是sql问题还是mongodb? 我正在使用 SQL 查询 Mongodb 您是否在使用一些 GUI/IDE,例如 studio3t 或 noSQLBooster,它们基本上将这些 sql 查询转换为 mongo 查询(这对复杂查询有限制)?为什么不简单地使用 mongo 查询作为发布的答案之一。 请编辑您的问题以包含示例 MongoDB 文档以及有关您正在使用的 SQL 连接器版本和 MongoDB 服务器版本的信息。假设您的DateTime
字段是 BSON Date 类型,则使用诸如 like
之类的字符串运算符进行匹配(大概翻译成 MongoDB 查询语言中的正则表达式)将不起作用。但是,根据您的连接器和服务器版本,可能有可用的 SQL 日期和时间函数来提取相关值。看起来您当前的示例数据与“每分钟的最后一秒”的预期查询不匹配。
感谢@ambianBeing 和@Stennie 的回复。我更新了问题
【参考方案1】:
你可以试试……
db.z.aggregate([
$addFields:
year: $dateToString: format: "%Y", date: "$DataTime" ,
month: $dateToString: format: "%m", date: "$DataTime" ,
day: $dateToString: format: "%d", date: "$DataTime" ,
hour: $dateToString: format: "%H", date: "$DataTime" ,
minute: $dateToString: format: "%M", date: "$DataTime" ,
second: $dateToString: format: "%S", date: "$DataTime"
]).pretty()
这假设您的字段 DataTime 的类型为 ISODate()...
示例文档:
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023b"), "Balance" : "2462188.61", "DataTime" : ISODate("2019-09-27T05:49:33.575Z")
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023c"), "Balance" : "2449426.30", "DataTime" : ISODate("2019-10-30T19:30:52.513Z")
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023d"), "Balance" : "2456459.67", "DataTime" : ISODate("2019-10-15T18:20:09.490Z")
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023e"), "Balance" : "1006266.91", "DataTime" : ISODate("2019-10-31T13:48:18.290Z")
示例查询输出:
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023b"),
"Balance" : "2462188.61",
"DataTime" : ISODate("2019-09-27T05:49:33.575Z"),
"year" : "2019",
"month" : "09",
"day" : "27",
"hour" : "05",
"minute" : "49",
"second" : "33"
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023c"),
"Balance" : "2449426.30",
"DataTime" : ISODate("2019-10-30T19:30:52.513Z"),
"year" : "2019",
"month" : "10",
"day" : "30",
"hour" : "19",
"minute" : "30",
"second" : "52"
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023d"),
"Balance" : "2456459.67",
"DataTime" : ISODate("2019-10-15T18:20:09.490Z"),
"year" : "2019",
"month" : "10",
"day" : "15",
"hour" : "18",
"minute" : "20",
"second" : "09"
"_id" : ObjectId("5dea94c3b4ae6bbc17cd023e"),
"Balance" : "1006266.91",
"DataTime" : ISODate("2019-10-31T13:48:18.290Z"),
"year" : "2019",
"month" : "10",
"day" : "31",
"hour" : "13",
"minute" : "48",
"second" : "18"
【讨论】:
感谢您的回复@barrypicker。但是我正在编写 SQL 来查询 Mongodb。【参考方案2】:对日期使用排序功能
例如:
db.collection.find().sort("Date_Field")
【讨论】:
Op 正在询问将查询 mongoDB 的 SQL 查询!以上是关于如何使用 SQL 查询从 mongoDB 获取每分钟的最后一秒的主要内容,如果未能解决你的问题,请参考以下文章