Node.js 带随机场的MongoDB分组查询

Node.js 带随机场的MongoDB分组查询,node.js,mongodb,mongoose,nosql,Node.js,Mongodb,Mongoose,Nosql,我有专辑数据库 每个文档都是这样的 { "_id" : ObjectId("576a569a32f844c021019533"), "genres" : [ "Rock", "Funk / Soul", "Blues" ], "artistJoins" : [ { "artist_name" : "Citizen Cope" } ], "

我有专辑数据库 每个文档都是这样的

{ 
    "_id" : ObjectId("576a569a32f844c021019533"),
    "genres" : [
        "Rock", 
        "Funk / Soul", 
        "Blues"
    ], 
    "artistJoins" : [
        {
            "artist_name" : "Citizen Cope"
        }
    ],
    "title" : "Bullet And A Target",
    "tracklist" : [
        {
            "duration" : "4:22", 
            "position" : "A",
            "title" : "Bullet And A Target"
        },
        {
            "duration" : "3:22", 
            "position" : "A",
            "title" : "Unfaithful"
        }
    ]
}
我正在尝试获取每个文档的跟踪列表项 因此,我最终将有一个轨迹列表项和艺术家名称的列表(来自artistJoins[0]。艺术家名称) 数据库非常庞大,大约有1000000个文档

我做了一些有效的事情,而且速度很快(也许我错了)

这就是我试过的

 db.collection('releases').aggregate( [
        { $sample: {size: 100}},
        { $unwind : {path:"$tracklist" ,preserveNullAndEmptyArrays: false,includeArrayIndex: "songposition" } },
        { $match: { $or: [{ genres: 'Rock' }, { genres: 'Hip Hop' }] }},
        { $project: {"_id":0,"tracklist": 1,"songposition":1, "artistJoins":1}}
    ] ,  function(err, result) {
        callback(result);
    });
这个例子以1400毫秒为例(它快吗?) 顺便说一句,体裁可以更改,但每个体裁至少有100个结果,因此数据库中没有足够的数据 这个查询的问题是,有时他给我的100个跟踪列表更少,有时更多 要随机获得100个艺术家姓名的曲目列表项,最好的解决方案是什么 例如,在本文档中,我将获得以下列表

(顺便说一下,这是我现在得到的,但有时少于100,有时更多)

对所有其他文件都这样做,直到我得到100份清单

希望我能得到一个更好的解决方案,甚至更快,至少不会更慢 希望我很清楚如果不告诉我,我会更新

[
    {
     "atrist_name" : "Citizen Cope",
     "tracklist" :{
             "duration" : "4:22", 
             "position" : "A",
             "title" : "Bullet And A Target"
         }
    },
    {
     "atrist_name" : "Citizen Cope",
     "tracklist" :{
             "duration" : "3:22", 
             "position" : "A",
             "title" : "Unfaithful"
         }
    }
]