0

我正在尝试编写一个查询来查找集合中的所有文档,其中“日期”<当前日期,标志 = true,按日期排序(降序)并将结果限制为(例如)10 个文档,然后选择所有剩余的集合中的文档(满足日期和标志条件)以执行更新。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 }
  ]
)

是否可以在数据库中进行减法,或者我唯一的选择是在客户端处理两个查询的结果?

4

1 回答 1

0

这实际上只是一个简单的查询,就像MINUS“排除”一样,您真正所说的归结为“通过这些标准排除前 10 个结果”

db.scratch.find({ "date": { "$lt": new Date() }, "flag": true })
  .sort({ "date": -1 }).skip(10);

因此,“限制前 10 个,然后从整体中排除这些结果”基本上简化为 SKIP,基于相同的标准。

于 2017-11-08T23:44:44.100 回答