通过随机字段查询MongoDB组

时间:2016-06-28 13:10:48

标签: node.js mongodb mongoose nosql

我有专辑数据库 每个文件看起来都是那样

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

我正在尝试获取每个文档的tracklist项目 所以我最终会有一个tracklist项目和艺术家名称列表(来自artistJoins [0] .artist_name) db真的很像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,有时更多)

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

并为所有其他文件这样做,直到我得到100

的列表

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

0 个答案:

没有答案