【问题标题】:getting random n record not wroking获取随机 n 记录不起作用
【发布时间】:2018-12-20 13:40:22
【问题描述】:
function get() {
    return new Promise(function (resolve, reject) {

        Card.find([
            { $sample: {size: 3} }, 
            { $match:  {"deckId": req.body.deckId} }
        ]).exec(function(err,result){
            if(err){
                reject(err);
            }else{
                resolve(result)
            }
        });

    });
}

它给了我所有数据,但我只需要 3 个随机数据。我有谷歌关于获取随机 N 无数据但为什么不为我工作?

【问题讨论】:

  • 在这里尝试使用aggregate 而不是find,看看一个非常相似的案例here
  • @vahdet 但现在 $match 不适合我?
  • deckId: { type: Schema.Types.ObjectId, ref: 'Decks', required: '请提供 Deck' } 我的 deckId 架构
  • new mongoose.Types.ObjectId(req.body.deckId) 解决我的问题
  • 永远不要把回调和promise混在一起,你可以简单地return Card.find(...).exec()返回promise。

标签: node.js mongodb mongoose


【解决方案1】:
function get() {
    return new Promise(function (resolve, reject) {

        Card.aggregate([
            { $sample: {size: Number(req.body.wordCount)} }, 
            { $match:  {"deckId": new mongoose.Types.ObjectId(req.body.deckId)} }
        ]).exec(function(err,result){
            if(err){
                reject(err);
            }else{
                resolve(result)
            }
        });

    });
}

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2011-07-17
    • 2017-10-04
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2017-06-05
    • 2016-05-06
    相关资源
    最近更新 更多