给定ID,查找DueAt小于ID.dueAt的条目

时间:2019-02-26 15:29:30

标签: mongodb mongodb-query aggregation-framework

我正在尝试编写一个查询。我收藏了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 } });

1 个答案:

答案 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" }}
])