【问题标题】:How to get last second of every minute from mongoDB using SQL query如何使用 SQL 查询从 mongoDB 获取每分钟的最后一秒
【发布时间】: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 的回复。我更新了问题

标签: sql mongodb datetime mongodb-query seconds


【解决方案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 查询!
猜你喜欢
  • 2013-08-16
  • 2014-06-11
  • 2021-04-06
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
相关资源
最近更新 更多