2015-02-20 3 views
0

Я учусь узел и теперь я пытаюсь заказать массив так:массив Сортировать по значению в NodeJS

"lng" : [{ 
     "ES" : 5, 
     "EN" : 3, 
     "IT" : 4 
    }] 

(Это часть результата запроса в MongoDB), мне нужно заказать массив числа:

"ES" : 5, 
"IT" : 4,  
"EN" : 3 

Я использовал sort(), но эта функция упорядочивает массив в алфавитном порядке по первому параметру, но мне нужен порядок второго, я пробовал много вещей, но без результата.

Благодарим за помощь!

+0

вы используете мангуста? или mongodb native? пожалуйста, напишите полный запрос – Alex

+0

Вы пытаетесь сортировать '{" ES ": 5," EN ": 3," IT ": 4}' _JavaScript Object_? Если я правильно помню, пары ключ-значение JavaScript-объектов не имеют «порядка». – Passerby

+0

Привет, Алекс, спасибо за ответ, я использую Mongoose. Каждый элемент коллекции такова: { "_id": ObjectId ("54a15e7e3453b5741a6c7be0"), "Название": "Мигель", "LNG": { "ES": 5, " EN»: 3, "IT": 4 }, "электронная почта": "[email protected]", "пароль": "123123" } ... и т.д.. И запрос: db.users.find ({ "lng.en": {$ л: 5}}) Я хочу, чтобы получить пользователей, которые имеют "EN" с уровнем 1,2,3 или 4. Спасибо –

ответ

1

JavaScript не имеет упорядоченных объектов, поэтому сначала следует превратить свой объект в массив такого рода:

[ 
    { key: "ES", value: 5 }, 
    { key: "EN", value: 3 }, 
    { key: "IT", value: 4 } 
] 

А затем сортировать по ключу value.

Вы можете легко сделать это следующим образом:

// ("mongoDbResult" is the variable with an object you get from MongoDB) 
var result = mongoDbResult.lng; 

result = Object.keys(result).map(function (key) { 
    return { key: key, value: result[key] }; 
}); 

А потом просто сортировать по ключевым value:

result.sort(function (a, b) { 
    return (a.value < b.value) ? -1 : 1; 
}); 

В результате вы должны получить отсортированный массив в переменной result.

0

Спасибо Никиту, добавив ключ и значение своего рода работает отлично, моя проблема теперь сделать запрос, чтобы получить результаты с определенным ключом и значением ...

я могу получить элементы по ключу:

db.users.find({"lng.key" : "ES"}) 

Или значение:

db.users.find({"lng.value" : 5}) 

Но не оба в одном запросе:/

[EDIT]

меня найти решение, $ elemMatch:

db.users.find({lng_array : {$elemMatch:{key:"ES", value:5}}}) 
Смежные вопросы