簡體   English   中英

如何在Mongoose上使用變量而不是字符串按數組索引排序?

[英]How to sort by Array index on Mongoose using a variable instead of string?

我正在嘗試根據變量的索引值對數據進行排序。

我想擁有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]對我的數據進行排序。 我該怎么辦?

附錄:

模型:

[
  {
    "username": "p",
    "totalClicks": [
      67,
      25
    ]
  },
  {
    "username": "kk",
    "totalClicks": [
      61,
      38
    ]
  }
]

您不能使用包含像這樣的字面量的字符串的變量來設置對象鍵,並且您的sort函數基本上將對象作為參數。

.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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM