我尝试撰写查询,以便使用' date'来查找集合中的所有文档。 < current date,flag = 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 }
]
)
是否可以在DB中进行减法,或者我唯一的选择是在客户端处理两个查询的结果?
答案 0 :(得分:0)
这实际上只是一个简单的查询,因为MINUS
只是做了一个“排除”,而你真正说的只是归结为“按这些标准排除前10个结果”。 / p>
db.scratch.find({ "date": { "$lt": new Date() }, "flag": true })
.sort({ "date": -1 }).skip(10);
所以“限制前10个,然后从整体中排除那些结果”基本上按照相同的标准减少到SKIP。