Привет, как мы можем сохранить значения из предыдущих конвейеров агрегации. Предположим, у меня есть несколько коллекций, предположим, что в этом случае 3 коллекции. В каждой коллекции может быть более 1000 документов
///collection 1: collection1///
{
"_id" : ObjectId("5e58b69b76e00159b4dfd286"),
"name" : "Dean"
"type" : ["app"],
"city" : "cityA1",
}
///collection 2: collection2///
{
"_id" : ObjectId("5e1efac668c3c811c83263cc"),
"code" : "A001",
"day" : "sunday",
"city" : "cityA1",
"status":"active"
},
{
"_id" : ObjectId("5e1efac668c3c811c83265fb"),
"Code" : "A002",
"day" : "sunday",
"city" : "cityA1",
},
///collection 3: collection3///
{
"_id" : ObjectId("5e58b69b76e00159b4dfd286"),
"collection1_Id":ObjectId("5e58b69b76e00159b4dfd286")
"handleCount" : 34,
"code" : "A001",
},
{
"_id" : ObjectId("5e58b69b76e00159b4dfd286"),
"collection1_Id":ObjectId("5e58b69b76e00159b4dff345")
"code" : "A001",
}
Теперь вот запрос
db.collection1.aggregate([
{
'$match': {
status: 'active',
}
},
{
$lookup: {
from: "collection2",
let: {
city: "$city",
},
pipeline: [
{
$match: {
$expr: {
$eq: ["$city", "$$city"]
}
}
}
], as: "collection2"
}
}, {'$unwind':'$collection2'},
{
$lookup: {
from: "collection3",
let: {
collection1_Id: "$_id",
},
pipeline: [
{
$match: {
$expr: {
$eq: ["$collection1_Id", "$$$collection1_Id"]
}
}
}
], as: "collection3"
}
},])
, теперь этот запрос выдает результаты из collection1 и collection2 как "city" - это общий ключ, но общий ключ для collection1 и collection3 - это "_id" и "collection1_Id" соответственно, я не могу использовать the_id первого конвейера в 3-м конвейере, если я не могу, то каков обходной путь для этого. Я пытаюсь достичь этой постановки проблемы. 1: Мне нужно узнать все активные идентификаторы из коллекции1. 2: тогда мне нужно найти весь «код» для этого города из коллекции2. 3: тогда мне нужно выяснить "chainCount" из collection3, если он существует, если collection1_id совпадает с collection1 "_id".