Arrays Mongoose将嵌套排序对象传递给查询

Arrays Mongoose将嵌套排序对象传递给查询,arrays,node.js,mongodb,sorting,mongoose,Arrays,Node.js,Mongodb,Sorting,Mongoose,我有以下查询,作为硬编码字符串传递: 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 )

我有以下查询,作为硬编码字符串传递:

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 );
} );
然而,当我试图通过我的路线时,param
:round
如下:

let query = { "score.0.r" + req.params.round : -1};
它不工作(返回未排序的列表)

我也尝试过:

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(四舍五入)分数排序的列表。

我认为这应该行得通

let sort =  "score.0.r" + req.params.round
let query = { [sort] : -1 };
这只是javascript,默认情况下,javascript中对象的键被转换为字符串

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对象中执行动态键,只需将键用括号括起来

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

天才!谢谢你,我从来没有想过。如果您想对此做一个简短的解释,我相信这对其他人也会非常有用。:-)