Моя коллекция:
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": [
{
"field1": "{\"$ref\": \"otherCollection\", \"$id\": \"...\", \"$db\": \"sameDataTable\"}", // string
// .. some other fields
}
]
},
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": []
}
Я хочу сделать от $lookup
до otherCollection
, но сначала мне нужно получить ObjectId из field1
строки из mySubArray
.
Что я пытался сделать, так это выбрать этот ObjectId с $arrayElemAt
с $map
внутри $project
:
[
{
"$match" : {
// my match
},
{
"$project": {
"its": {
"$map": {
"input": {
"$map": {
"input": "$mySubArray",
"as": "element",
"in": {
"field1": {
"$arrayElemAt": [
{
"$objectToArray": "$element.field1"
},
1
]
}
},
}
},
"in": "$$this.v"
}
}
}
}/*,
{
$lookup: {
from:"otherCollection",
localField:"mySubArray.id",
foreignField:"_id",
as:"mySubArray.myNewField"
}
}*/
]
Итак, это будет выглядеть так:
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": [
{
"field1": "{\"$ref\": \"otherCollection\", \"$id\": \"...\", \"$db\": \"sameDataTable\"}", // string
"myNewFiled": {
//my new object that i get with $lookup
}
// .. some other fields
}
]
},
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": []
}
Но я не получаю никаких других полей, кроме _id
и mySubArray
с нулем внутри:
{
"_id" : ObjectId("..."),
"mySubArray" : [
null
]
}