MongoDB过滤器集合未包含在另一个集合的array字段中

时间:2020-08-22 02:13:25

标签: mongodb

我需要两个查询器才能收集以下信息。我认为第一个比较简单,第二个我不确定是否可能,但是会更适合我。

工作流程:

{"_id" 1:, "name": "Workflow 1": "connections": [1, 2]}
{"_id" 2:, "name": "Workflow 2": "connections": [3, 4]}

连接:

{"_id": 1, "name": "Connection 1"}
{"_id": 2, "name": "Connection 2"}
{"_id": 3, "name": "Connection 3"}
{"_id": 4, "name": "Connection 4"}
{"_id": 5, "name": "Connection 5"}
{"_id": 6, "name": "Connection 6"}

1-第一个查询:

如何过滤我的Connection集合以仅检索不在Workflow 1,2中的那些?

在这种情况下,查询应返回:

{"_id": 5, "name": "Connection 5"}
{"_id": 6, "name": "Connection 6"}

2-第二个查询:

如何过滤我的Connection集合以仅检索不在任何工作流中的那些?也就是说,在这种情况下,我不需要查询的工作流列表,这意味着任何可能的连接都不包含。

这两个查询将返回相同的结果,但是第二个查询则不需要我首先检索工作流程列表。

1 个答案:

答案 0 :(得分:1)

检索连接

  • $lookup加入workflow集合
  • $match连接ID是否在数组中
  • $matchconnections不是
  • $project显示必填字段
db.connection.aggregate([
  {
    $lookup: {
      from: "workflow",
      let: { c_id: "$_id" },
      as: "connections",
      pipeline: [ { $match: { $expr: { $in: ["$$c_id", "$connections"] } } } ]
    }
  },
  { $match: { connections: { $eq: [] } } },
  { $project: { _id: 1, name: 1 } }
])

Playground