MongoDB聚合结果差异
MongoDB aggregation result difference
我正在尝试编写查询以查找集合中所有文档 'date' < 当前日期,标志 = true,按日期排序(降序)并将结果限制为(例如)10文档,然后 select 集合中所有 remaining 个文档(满足日期和标记条件)以执行更新。 SQL 等价于:
SELECT * FROM TABLE
WHERE DATE < SYSDATE
AND FLAG = TRUE
MINUS
SELECT * FROM TABLE
WHERE DATE < SYSDATE
AND FLAG = TRUE
ORDER BY DATE DESC
LIMIT 10
到目前为止我有:
db.scratch.aggregate(
[
{ $match: { flag: true, date: { $lt: new Date() } } },
{ $sort: { date: -1 } },
{ $limit: 10 }
]
)
是否可以在数据库中进行减法,或者我唯一的选择是在客户端处理两个查询的结果?
这实际上只是一个简单的查询,因为 MINUS
只是执行 "exclusion",而您真正要说的全部归结为 "exclude the first 10 results by these criteria" .
db.scratch.find({ "date": { "$lt": new Date() }, "flag": true })
.sort({ "date": -1 }).skip(10);
所以 "limit the first 10 and then exclude those results from the overall" 基本上减少到 SKIP,基于相同的标准。
我正在尝试编写查询以查找集合中所有文档 'date' < 当前日期,标志 = true,按日期排序(降序)并将结果限制为(例如)10文档,然后 select 集合中所有 remaining 个文档(满足日期和标记条件)以执行更新。 SQL 等价于:
SELECT * FROM TABLE
WHERE DATE < SYSDATE
AND FLAG = TRUE
MINUS
SELECT * FROM TABLE
WHERE DATE < SYSDATE
AND FLAG = TRUE
ORDER BY DATE DESC
LIMIT 10
到目前为止我有:
db.scratch.aggregate(
[
{ $match: { flag: true, date: { $lt: new Date() } } },
{ $sort: { date: -1 } },
{ $limit: 10 }
]
)
是否可以在数据库中进行减法,或者我唯一的选择是在客户端处理两个查询的结果?
这实际上只是一个简单的查询,因为 MINUS
只是执行 "exclusion",而您真正要说的全部归结为 "exclude the first 10 results by these criteria" .
db.scratch.find({ "date": { "$lt": new Date() }, "flag": true })
.sort({ "date": -1 }).skip(10);
所以 "limit the first 10 and then exclude those results from the overall" 基本上减少到 SKIP,基于相同的标准。