Вы можете попробовать выполнить запрос агрегации ниже:
Запрос 1:
db.collection.aggregate([
{
$project: {
animalArray: {
$map: {
input: "$animalArray",
in: {
$cond: [ /** Check if it's first element in 'animalArray' array */
{ $eq: ["$$this", { $arrayElemAt: ["$animalArray", 1] }] },
{ /** If Yes, merge 1st element with elements of 'array_b' array */
$reduce: {
input: "$array_b",
initialValue: "$$this",
in: { $concatArrays: ["$$value", ["$$this"]] }
},
},
"$$this" /** If No, Just pass it on*/
],
},
},
},
},
}
]);
Тест: MongoDB-Playground
Запрос 2: Возможно, вам не понадобится использовать $map
до l oop через 'animalArray', если он содержит только два элемента, поскольку первый запрос делает это динамически.
db.collection.aggregate([
{
$project: {
animalArray: 1,
mergedArray: {
$reduce: {
input: "$array_b",
initialValue: { $arrayElemAt: ["$animalArray", 1] },
in: { $concatArrays: ["$$value", ["$$this"]] },
},
},
},
},
{
$project: {
animalArray: {
$concatArrays: [
[{ $arrayElemAt: ["$animalArray", 0] }],
["$mergedArray"],
],
},
},
},
]);
Тест: MongoDB-Playground