Mongoose .populate 随机

Posted

技术标签:

【中文标题】Mongoose .populate 随机【英文标题】:Mongoose .populate random 【发布时间】:2018-09-10 16:07:49 【问题描述】:

可以“随机填充”吗?

示例

.populate(
    path: 'path',
    options: limit: 2
);  

“示例” 总是返回相同的 2 个项目。始终是数组中的最后 2 项。 是否可以使用.populate() 返回随机项目?怎么制作?

【问题讨论】:

【参考方案1】:

用户javascript'Math.randomMath.floor

random() 方法返回一个随机数,从 0(含)到 但不包括 1(独占)。

更多细节和例子:https://www.w3schools.com/js/js_random.asp

所以在120 之间有一个随机限制:

var myLimit = Math.floor(Math.random() * (20 - 1) + 1);

.populate(
    path: 'path',
    options: limit: myLimit
); 

编辑

如果你想每次返回2随机项目,使用skip

var myRandom = Math.floor(Math.random() * (20 - 1) + 1);

.populate(
    path: 'path',
    options: limit: 2, skip:myRandom
); 

但这会在第一个 20 中选择两个随机记录,更准确地说,您需要计算所有记录,然后生成一个介于 1 和该计数之间的随机数:

yourModel.count(, function( err, count)

    var myRandom = Math.floor(Math.random() * (count - 1) + 1);

    // your old code ..
    .populate(
        path: 'path',
        options: limit: 2, skip:myRandom
    ); 
)

【讨论】:

对不起,我不想更改限制,我希望它是 2,问题是它总是只返回相同的 2 项 我想做一些像 $sample 这样的东西,它总是返回随机项目。是否可以使用 populate 返回随机项目?

以上是关于Mongoose .populate 随机的主要内容,如果未能解决你的问题,请参考以下文章

Populate Virtuals似乎不起作用。谁能告诉我这个错误?

mongoose.populate() 未显示填充内容

mongoose.populate() 未显示填充内容

19-3-18 mongoose 连表查询populate用法

Mongoose .populate() 不填充

Model.populate() 不是 Mongoose 中的返回文档