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"
}
}
]