Mongoose传递嵌套的sorting对象进行查询

我有以下查询,作为一个硬编码的string传递作品:

router.get( '/rank/:round/', ( req, res, next ) => { let query = { "score.0.r1" : -1}; Team.find( {} ) .sort( query ) .then( teams => { return res.json( teams ); } ).catch( next ); } ); 

但是,当我尝试通过我的路线参数:round像这样的:round

 let query = { "score.0.r" + req.params.round : -1}; 

它不起作用(它返回一个未sorting的列表)。

我也试过了:

 let sort = "score.0['r" + req.params.round + "']"; let query = { sort : -1 }; 

再次,没有成功。 这是我正在查询的示例文件:

  { "_id" : ObjectId("57cc7665a43bf14533b0d78a"), "name" : “Joe Bloggs”, "score" : [ { "r5" : 23, "r4" : 20, "r3" : 25, "r2" : 23, "r1" : 40 } ] } 

…我试图用r(圆)分数返回一个sorting列表。

我认为这应该工作。

 let sort = "score.0.r" + req.params.round let query = { [sort] : -1 }; 

这只是JavaScript,默认情况下,JavaScript中的对象的键被转换为一个string

 let query = { "score.0.r" + req.params.round : -1}; query; //{ String("score.0.r" + req.params.round) : -1} //{ '"score.0.r" + req.params.round': -1} let sort = "score.0['r" + req.params.round + "']"; let query = { sort : -1 }; query; // { String(sort) : -1} => {"sort": -1} 

在javascript对象中做dynamic键,只需将括号括起来即可

 var string = "any_string" + variable var obj = { [string] : "anyvalue"} //this will tell javascript that the key is variable not a string