【发布时间】: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