如何在两个子选项上使用动态键对MongoDB条目进行多重排序?

如何在两个子选项上使用动态键对MongoDB条目进行多重排序?,mongodb,sorting,mongojs,Mongodb,Sorting,Mongojs,我正试图在MongoDB中使用mongojs在find()上对其进行排序: { “歌曲”:{ “bnphoyigre”:{ “id”:“bnphoyigre”, “标题”:“Kygo-ID(超音乐节国歌)”, “投票”:1, “新增”:1428514707, “guids”:[ “MzM3NTUx” ] }, “izJzdDPH9yw”:{ “id”:“izJzdDPH9yw”, “标题”:“本杰明·弗朗西斯·利夫维奇-阿特拉斯之手(武士编辑)”, “投票”:1, “新增”:1428514740

我正试图在MongoDB中使用mongojs在
find()
上对其进行排序:

{
“歌曲”:{
“bnphoyigre”:{
“id”:“bnphoyigre”,
“标题”:“Kygo-ID(超音乐节国歌)”,
“投票”:1,
“新增”:1428514707,
“guids”:[
“MzM3NTUx”
]
},
“izJzdDPH9yw”:{
“id”:“izJzdDPH9yw”,
“标题”:“本杰明·弗朗西斯·利夫维奇-阿特拉斯之手(武士编辑)”,
“投票”:1,
“新增”:1428514740,
“guids”:[
“MzM3NTUx”
]
},
“Yifz3X_i-F8”:{
“id”:“Yifz3X_i-F8”,
“标题”:“M83-等待(Kygo混音)”,
“投票数”:0,
“新增”:1428494338,
“guids”:[]
},
“nDopn_p2wk4”:{
“id”:“nDopn_p2wk4”,
“标题”:“Syn Cole-迈阿密82(Kygo混音)”,
“投票数”:0,
“新增”:1428494993,
“guids”:[]
}
}
}
我想对歌曲中的键按
投票
升序和
添加
降序进行排序

我试过了

db.collection(coll.find().sort({投票:1},函数(err,docs){});

<>但是这不起作用。

如果这是一个你经常要做的操作,我会强烈考虑改变你的模式。如果将
歌曲
制作为数组而不是贴图,则可以使用聚合执行此查询

db.coll.aggregate([{“$unwind”:“$songs”},{“$sort”:{“songs.vots”:1,“songs.added”:-1}]);
如果您将这些歌曲放在一个单独的
songs
集合中,那么您可以使用一个简单的
find()
sort()
执行查询

db.songs.find();
然而,对于当前的模式,所有这些逻辑都需要在应用程序中,并且会变得混乱。一个可能的解决方案是获取所有文档,并在遍历光标时,对每个文档遍历键,将它们添加到数组中。数组中包含所有子文档后,根据
投票
添加
对数组进行排序

这是可能的,但不必要的复杂。当然,你不能利用索引,这会影响你的表现


您已经在子文档中包含了
,因此我建议您重新考虑您的模式

没有办法按您尝试的方式对键进行排序。如果需要对它们进行排序,则应该更改结构。