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