javascript - 如何使用变量而不是字符串按 Mongoose 上的数组索引排序?

标签 javascript arrays node.js mongodb sorting

我正在尝试根据变量的索引值对数据进行排序。

我想要 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/

相关文章:

javascript - 在 jquery 提交函数中分配全局变量并传递给正则表达式函数

Java:编写一个简单的迷宫游戏

mysql - NodeJS 通过预准备语句抛出类似 mysql 查询的错误

mysql - group_concat_max_len 在 nodejs 中设置

javascript - 替换javascript中的空格

javascript - e.target 可以访问,但是 e.target.value 不在 React 组件中

javascript - 数组 数学逻辑 JavaScript

Java - 静态和动态数组初始化

javascript - 以特定方式对多维数组进行分组/压缩的更有效/更聪明的方法

javascript - 如何在laravel中使用ajax将数据数组发送到 Controller