MongoDB筛选器集合不包含在另一个集合的数组字段中
我需要两个问题来解决下面的问题。第一个我认为更简单,第二个我不确定是否可能,但它更适合我 工作流程:MongoDB筛选器集合不包含在另一个集合的数组字段中,mongodb,Mongodb,我需要两个问题来解决下面的问题。第一个我认为更简单,第二个我不确定是否可能,但它更适合我 工作流程: {"_id" 1:, "name": "Workflow 1": "connections": [1, 2]} {"_id" 2:, "name": "Workflow 2": "connections": [3, 4]} 连接: {&
{"_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-第一个查询:
如何筛选连接集合以仅检索不在工作流1,2内的连接集合
在这种情况下,查询应返回:
{"_id": 5, "name": "Connection 5"}
{"_id": 6, "name": "Connection 6"}
2秒查询:
如何筛选连接集合以仅检索不在任何工作流中的连接集合?也就是说,在本例中,我不需要任何可能的工作流中都不包含的查询意义连接的工作流列表
这两个查询将返回相同的结果,但第二个查询不需要首先检索工作流列表。检索连接
加入$lookup
集合工作流
是否在阵列中匹配连接id$match
是$match
不是连接
显示所需字段$project
@Mauricio没有收到第二个查询,我认为它在这一个查询中就完成了。既然你给了我我所需要的确切查询,我正在检查答案是否正确。但它对我的10GB数据库不起作用,因为它被证明是非常繁重的查询。
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 } }
])