如何使用variables而不是stringsortingMongoose上的数组索引?

我试图根据variables的索引值对数据进行sorting。

我想有totalClicks[0] ,但totalClicks[0]语法不起作用。 我search并尝试使用'totalClicks.0' ,这工作正常。 但我需要检查req.params.bossId基于array[req.params.bossId]对数据进行sorting。

这是第一个硬编码的代码。

 User.find({}).sort({ 'totalClicks.0' : '1'}).exec( function (err, data) { res.json(data); }); 

这个dynamicselectsorting的数组字段的代码不工作,整个.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); }); 

如果IDvariables是0 ,他们我想通过totalClicks[0]sorting数据。
如果IDvariables是1 ,他们我想通过totalClicks[1]sorting数据。

我需要接收一个variablesbossId并使用该variables,基于array[bossId]对数据进行sorting。 我怎么能这样做?

附录:

模型:

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

你不能用一个包含string的variables来设置一个对象键,而你的sorting函数基本上把一个对象作为参数。

 .sort({key : value}) 

用dynamic键创build一个对象,我们必须这样做

 var obj = {}; var key = 'something'; obj[key] = 'value'; // now obj === {'something' : 'value'} 

所以解决的办法是先创build对象,然后传入

 var totalClicksId = 'totalClicks.' + req.params.bossId; var obj = {}; obj[totalClicksId] = '1'; User.find({}).sort(obj).exec(function (err, data) { res.json(data); });