【问题标题】:Convert complex DB2 SQL with ROW_NUMBER() to mongo query使用 ROW_NUMBER() 将复杂的 DB2 SQL 转换为 mongo 查询
【发布时间】:2017-04-19 07:21:17
【问题描述】:

我是 MongoDB 的新手,我正在尝试将现有的 DB2 查询转换为 MongoDB。我正在使用 Java 运行此查询。

当前 DB2 查询:

SELECT * FROM 
(SELECT MBI.*, ROW_NUMBER() OVER Order by PDATE DESC AS rownumber 
  FROM USER1.COLLECTION1 MBI, USER1.COLLECTION2 IC  
  WHERE MBI.VISIBILITY = 1 and MBI.MBOXID = '1234' 
    AND UPPER(MBI.MBOXITID) >= '1234555' 
    AND UPPER(MBI.CATEGORY) = 'S' 
    AND UPPER(MBI.Mimetype) = 'PDF' 
    AND UPPER(MBI.Psystemid) = 'TBA' 
    AND days(current date) - days(MBI.PDATE) < 20 
    AND MBI.MBOXITID = IC.ICONTENTID) AS FinalResult 

    WHERE rownumber BETWEEN 1 and 2 Order by PDATE DESC

我真的不确定如何在 MongoDB 中获取 ROW_NUMBER 详细信息。

你能帮我解决问题吗?

【问题讨论】:

  • 您能否详细说明您的用例:您是将数据从 DB2 迁移到 MongoDB,还是尝试使用 MongoDB 协议查询 DB2 中的现有数据?如果直接使用 MongoDB,您能否提供您的 MongoDB 文档示例、您尝试过的查询方法,并确认您的特定 MongoDB 版本?您的原始查询采用非常相关的方法(例如,子选择和连接)并进行大量字段操作以匹配结果。如果这是一个常见的查询(或者您希望它高效),一个值得推荐的起点是重新考虑您的数据模型以更好地适应您的用例
  • @Stennie 谢谢 Stennie 的回复!是的,我们正在迁移,所以我们正在转换/更新现有的 JAVA API。在 Java API 更新期间,我面临着这个挑战。 要求: Collection #1: VISIBILITY、MBOXID、MBOXITID、CATEGORY、Mimetype、Psystemid Collection #2: ICONTENTID 子查询:与上述文件匹配一些值并动态创建基于 ROWNUMBER 的 PDATE 字段(即按 PDATE DESC AS 行号排序)。主查询:rownumber 有助于获取 IN BETWEEN 记录(i.e., rownumber BETWEEN 1 and 2 Order by PDATE DESC
  • @Stennie - MongoDB 版本 3.4.3 和 Java 驱动程序:mongodb-driver-3.4.2.jar

标签: java mongodb mongodb-query mongodb-java window-functions


【解决方案1】:

@bharathiraja,希望您现在已经完成了迁移并弄清楚了步骤。您必须将内部连接转换为 mongodb 查找运算符,然后删除空值(因为查找是左外部连接运算符)。从您的查询来看,您似乎正在尝试使用 row_number() 进行分页。在Mongodb聚合框架中,在PDATE上完成排序后,可以添加limit和skip操作符进行分页。

在 Couchbase(我工作的地方),我们像标准 SQL 一样构建了 row_number()。查看。 https://blog.couchbase.com/on-par-with-window-functions-in-n1ql/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    相关资源
    最近更新 更多