我正在尝试编写一个查询。我收藏了Event
。每个事件都有一个dueAt
字段,该字段是一个数字。给定一个事件的id,我想查找所有DueTo小于给定id的事件的dueAt的事件。
这是我的意思的示例,我的收藏有以下伪代码:
id: 1,
dueAt: 100
id: 2,
dueAt: 101
id: 3,
dueAt: 102
然后我只有id为“ 3”的查询,例如:
eventCollection.find({
{ dueAt: { '<': 'dueAtOfId(3)' }}
});
此技术有名称吗?有人知道他们在MySQL中叫什么吗?
我可以在两个查询中轻松地做到这一点,但是我想避免使用伪代码进行学习:
const events = await eventCollection.find({ _id: 3 });
const maxDueAt = events[0].dueAt;
const result = await eventCollection.find({ dueAt: { '<': maxDueAt } });
答案 0 :(得分:1)
您可以使用以下单个查询
const result = await eventCollection.aggregate([
{ "$match": { "_id": 3 }},
{ "$lookup": {
"from": "eventCollection",
"let": { "dueAt": "$dueAt" },
"pipeline": [
{ "$match": { "$expr": { "$gte": ["$dueAt", "$$dueAt"] }}}
],
"as": "result"
}},
{ "$unwind": "$result" },
{ "$replaceRoot": { "newRoot": "$result" }}
])