我需要两个查询器才能收集以下信息。我认为第一个比较简单,第二个我不确定是否可能,但是会更适合我。
工作流程:
{"_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"}
如何过滤我的Connection集合以仅检索不在Workflow 1,2中的那些?
在这种情况下,查询应返回:
{"_id": 5, "name": "Connection 5"}
{"_id": 6, "name": "Connection 6"}
如何过滤我的Connection集合以仅检索不在任何工作流中的那些?也就是说,在这种情况下,我不需要查询的工作流列表,这意味着任何可能的连接都不包含。
这两个查询将返回相同的结果,但是第二个查询则不需要我首先检索工作流程列表。
答案 0 :(得分:1)
检索连接
$lookup
加入workflow
集合$match
连接ID是否在数组中$match
是connections
不是$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 } }
])