Answer the question
In order to leave comments, you need to log in
How to merge document values into one array in mongodb?
I'm trying to figure out how to interact with data in mongo and transform the response as I see fit.
For example, there is input data. foo - array of numbers, bar - optional number
{ _id : 0, foo: [], bar: 1 },
{ _id : 1, foo: [2, 3], bar: 4 },
{ _id : 3, foo: [5, 6], bar: undefined }
[1, 2, 3, 4, 5, 6]
Answer the question
In order to leave comments, you need to log in
without aggregation, nowhere
, collected in mongo compass
db.collection.aggregate([
{
'$addFields': { // новое поле nums
'nums': {
'$concatArrays': [ // соберем из foo bar
'$foo', [ '$bar' ]
]
}
}
}, {
'$project': { // только оно нам нужно
'nums': 1
}
}, {
'$unwind': { // ВСЕ номера
'path': '$nums'
}
}, {
'$match': { // уберем пустые строки и null и прочий мусор
'nums': {
'$type': 'number'
}
}
}, {
'$group': { // addToSet то есть только уникальные
'_id': null,
'nums': {
'$addToSet': '$nums'
}
}
}, { // здесь можно остановиться
'$unwind': { // дальше только чтобы отсортировать, потому что сет не будет отсортирован
'path': '$nums'
}
}, {
'$sort': {
'nums': 1
}
}, {
'$group': {
'_id': null,
'nums': {
'$push': '$nums'
}
}
}
])
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question