我正在学习节点,现在我正在尝试订购这样的数组:
"lng" : [{
"ES" : 5,
"EN" : 3,
"IT" : 4
}]
(这是MongoDB查询结果的一部分),我需要按数字命令数组:
"ES" : 5,
"IT" : 4,
"EN" : 3
我使用了sort()
,但是这个函数按照第一个参数的字母顺序排序数组,但是我需要在第二个参数下排序,我已经尝试了很多但没有结果。
感谢您的帮助!
答案 0 :(得分:2)
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
变量中获得一个已排序的数组。
答案 1 :(得分:0)
谢谢Nikita,添加密钥和值,排序工作完美,我现在的问题是使查询获得具有特定键和值的结果...
我可以通过KEY获取元素:
db.users.find({"lng.key" : "ES"})
或者通过VALUE:
db.users.find({"lng.value" : 5})
但不是同一个问题的两者:/
<强> [编辑] 强>
我找到了解决方案 $ elemMatch :
db.users.find({lng_array : {$elemMatch:{key:"ES", value:5}}})