#javascript #arrays #mongoose
#язык JavaScript #массивы #мангуст
Вопрос:
У меня есть результат запроса мангуста:
{ "store": [ { "items": [ "A1", "A2" ] }, { "items": [ "A3", "A4" ] }, { "items": [ "B1", "B2" ] }, { "items": [ "B3", "B4" ] }, { "items": [ "C8", "C9", "C10" ] } ] }
Мне нужно это: [«A1″,»A2″,»A3″,»A4″,»B1″,»B2″,»B3″,»B4″,»C8″,»C9»,C10] Есть ли какой-нибудь способ сделать это без использования цикла foreach, так как мой массив будет таким длинным и отнимет много времени.
Комментарии:
1. Попробуйте: пусть результат = данные[‘store’].Плоская карта(значение =gt; значение. предметы)
2. если вы хотите добиться еще более высокой производительности, ознакомьтесь с моей опцией агрегирования для вашего запроса, чтобы вам вообще не приходилось использовать код JavaScript!
Ответ №1:
let data = { 'store': [ { 'items': [ 'A1', 'A2' ] }, { 'items': [ 'A3', 'A4' ] }, { 'items': [ 'B1', 'B2' ] }, { 'items': [ 'B3', 'B4' ] }, { 'items': [ 'C8', 'C9', 'C10' ] } ] } let result = data['store'].flatMap(value =gt; value.items) console.log(result)
Ответ №2:
Чтобы еще больше повысить производительность, вы можете напрямую использовать агрегацию, чтобы использовать более быструю производительность C в базе данных:
Я предполагаю, что ваш документ базы данных выглядит примерно так:
Если вы используете агрегацию, подобную этой:
let result = Model.aggregate([ {'$match':{'_id': "YourDesiredId"}}, // Add this line in case you want to match a specific document { '$unwind': { 'path': '$store' } }, { '$unwind': { 'path': '$store.items' } }, { '$group': { '_id': '$_id', 'items': { '$push': '$store.items' } } }, { '$project': { '_id': 0 } } ])
Ваш результат будет:
items:["A1","A2","A3","A4","B1","B2","B3","B4","C8","C9","C10"]