我正在尝试根据变量的索引值对数据进行排序。
我想要 totalClicks[0]
,但是 totalClicks[0]
语法不起作用。我搜索并尝试使用 'totalClicks.0'
,效果很好。但我需要检查 req.params.bossId
以根据 array[req.params.bossId]
对数据进行排序。
首先,硬编码,代码有效。
User.find({}).sort({ 'totalClicks.0' : '1'}).exec(
function (err, data) {
res.json(data);
});
此代码 动态选择要排序的数组字段,但不起作用,整个 .sort 方法将被忽略。
var bossId = req.params.bossId;
var totalClicksId = 'totalClicks.' + bossId;
console.log(totalClicksId); // totalClicks.0
console.log(typeof(totalClicksId)); // string
User.find({}).sort({ totalClicksId : '1'}).exec(
function (err, data) {
res.json(data);
});
如果 ID
变量是 0
,我想按 totalClicks[0]
对数据进行排序。
如果 ID
变量是 1
,我想按 totalClicks[1]
对数据进行排序。
我需要接收一个变量 bossId
并使用该变量,根据 array[bossId]
对我的数据进行排序。我该怎么做?
Appendix:
型号:
[
{
"username": "p",
"totalClicks": [
67,
25
]
},
{
"username": "kk",
"totalClicks": [
61,
38
]
}
]
最佳答案
您不能像这样用包含字符串的变量设置对象键,并且您的排序函数基本上将对象作为参数。
.sort({key : value})
要创建一个带有动态键的对象,我们必须做
var obj = {};
var key = 'something';
obj[key] = 'value'; // now obj === {'something' : 'value'}
所以解决方法是先创建对象,再传入
var totalClicksId = 'totalClicks.' + req.params.bossId;
var obj = {};
obj[totalClicksId] = '1';
User.find({}).sort(obj).exec(function (err, data) {
res.json(data);
});
关于javascript - 如何使用变量而不是字符串按 Mongoose 上的数组索引排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121380/