将此 SQL 查询转换为 mongodb 查询 -

Posted

技术标签:

【中文标题】将此 SQL 查询转换为 mongodb 查询 -【英文标题】:Convert this SQL query to mongodb query - 【发布时间】:2017-12-19 07:56:29 【问题描述】:

我是 MongoDB 新手,所以我需要帮助才能从下面的 SQL 查询创建一个 mongo 查询。我也在尝试创建一个类似于 mysql 查询的 MongoDB 查询。

//SQL
SELECT *
FROM SUMMARY
WHERE STATUS=? AND ENDTIME < (NOW() - interval 15 MINUTE)

// MongoDB
db.trip.find(
    "status": "CONNECTION_LOST",
    "endTime": 
        "$lt" : dateDifference : 
            $subtract: [ new Date(), 15*60*1000 ] 
        
     
)

以下是行程相关的mongo文档,日期为ISO格式

[
  

    "_id" : ObjectId("59b009af802f927038ee05e6"),
    "tripNum" : 644358,
    "startTime" : ISODate("2017-07-20T10:21:11Z"),
    "endTime" : "ISODate("2017-07-20T10:45:11Z"),
    "status" : "CONNECTION_LOST"
  ,
  

    "_id" : ObjectId("59b009erf802f9er38ee05e6"),
    "tripNum" : 644359,
    "startTime" : ISODate("2017-07-20T10:55:11Z"),
    "endTime" : ISODate("2017-07-20T11:21:11Z"),
    "status" : "CONNECTION_LOST"
  
]

【问题讨论】:

你有什么错误吗? 【参考方案1】:

您必须将日期计算结果转换为DateISODate)对象。

查询示例:

db.trip.find(
    "status": "CONNECTION_LOST",
    "endTime":  "$lt": new Date(new Date() - 15*60*1000) 
)

【讨论】:

【参考方案2】:

在 Mongodb 控制台中运行以下命令:

var endDate=new Date()

然后试试下面的代码:

db.trip.find("status": "CONNECTION_LOST",endTime:$gte:new Date(endDate-15*60*1000),$lt:endDate)

【讨论】:

endDate 字段不存在。尝试使用 endTime 但出现语法错误 db.trip.find("status": "CONNECTION_LOST",endTime:$gte:new Date(endTime-15*60*1000),$lt:new Date() ) 2017-12-19T08:38:39.864+0000 E QUERY [thread1] ReferenceError: endTime 未定义:

以上是关于将此 SQL 查询转换为 mongodb 查询 -的主要内容,如果未能解决你的问题,请参考以下文章

将此 SQL 查询转换为 NHibernate 标准查询

如何将此 SQL 查询转换为 SQLAlchemy

将此 JPQL 查询转换为 SQL 查询

如何将此查询转换为 Hive SQL?

如何将 SQLite 查询转换为 MongoDB 查询

如何将此 SQL 查询转换为 NSFetchRequest