【问题标题】:Mongoose : How will I get 5 random records with 5 different conditions?Mongoose:我将如何获得 5 个具有 5 个不同条件的随机记录?
【发布时间】:2014-05-30 10:19:25
【问题描述】:

我的模型:问题(仅给出与问题相关的数据,所有其他内容都被删除)

exports = module.exports = function(app, mongoose) {
  var questionSchema = new mongoose.Schema({
    difficultyLevel: {
        type: String,
        enum: ['easy', 'medium', 'hard']
    },
    questionType: {
        type: String,
        enum: ['Type1', 'Type2', 'Type3']
    },
    questionText: {
        type: String,
        trim: true
    }
  });
  questionSchema.plugin(require('./plugins/pagedFind'));
  questionSchema.set('autoIndex', (app.get('env') === 'development'));
  app.db.model('Questions', questionSchema);
};

我的数据库中有大约 250 多个问题。

我的要求:我需要 5 个随机问题,第一个和第二个问题应该是“Type1”,第三个问题应该是“Type2”,第四个应该是“Type3”,第五个应该是“Type1”

我实现它的想法:

async.parallel({
    Type1: function(callback) {
        Question.find({}, {
            questionType: "Type1"
        }).limit(3).exec(function (err, questions) {
            callback(null, questions)
        })
    },
    Type2: function(callback) {
        Question.find({}, {
            questionType: "Type2"
        }).limit(1).exec(function (err, questions) {
            callback(null, questions)
        })
    },
    Type3: function(callback) {
        Question.find({}, {
            questionType: "Type3"
        }).limit(1).exec(function (err, questions) {
            callback(null, questions)
        })
    },
},
function(err, results) {
    // Take all results here order it as per requirement and return
    //results.Type1, results.Type2, results.Type3
    // return the result in required order.
})

但我知道这不是有效的方法。因为它执行了 3 个查询,之后也必须更改顺序。

问题:最好/更好的方法是什么?

提前谢谢:)

【问题讨论】:

    标签: node.js mongodb express mongoose database


    【解决方案1】:

    有多种方法可以做到这一点。最简单的方法是skip()一个随机数量的文档,然后使用limit(1)从集合中获取一个文档。

    如果您要跳过大量文档,这可能会很昂贵。

    另一种解决方案是为每个问题类型生成一个唯一的整数字段(类似于 MySQL 中的自动增量)并在该字段上进行查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-29
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多