У меня есть документ mongo, содержащий массив строк, и мне нужно преобразовать этот конкретный массив строк в массив объектов, содержащий пару ключ-значение. Ниже приведена моя точная оценка.Преобразование массива mongo в объект с помощью пары ключ-значение
{
"_id" : ObjectId("57e3720836e36f63695a2ef2"),
"platform" : "A1",
"available" : {
"Community" : {
"attributes" : {
"type" : {
"values" : [
"well-known",
"simple",
"complex"
],
"defaultValue" : "well-known"
},
[......]
}
Текущий запрос:
templateAttributes.find({platform:"V1"}).map(function(c){
//instantiate a new array
var optionsArray = [];
for (var i=0;i< c['available']['Community']['attributes']['type']['values'].length; i++){
optionsArray[i] = {}; // creates a new object
optionsArray[i].label = c['available']['Community']['attributes']['type']['values'][i];
optionsArray[i].value = c['available']['Community']['attributes']['type']['values'][i];
}
return optionsArray;
})[0];
Результат:
[{label:"well-known", value:"well-known"},
{label:"simple", value:"simple"},
{label:"complex", value:"complex"}]
Является ли мой подход достаточно эффективно, или есть способ оптимизировать выше запрос, чтобы получить то же самое желаемый результат?
Любые конкретные причины, которые это необходимо сделать на стороне монгодба? –
Нет. Нет конкретной причины, по которой это нужно сделать на стороне монго. Поскольку я использую это в Meteor, этот запрос запускается в памяти (mini-mongo). – blueren
@ bluereen Ok. Тогда агрегат - это решение. Просто имейте в виду, что '$ unwind' будет умножать размер набора результатов array.length раз. Поэтому используйте '$ project', чтобы просто сохранить необходимые поля, возможно, только« значения ». –