在Mongoose中,您可以编写如下语句来返回带有受限字段的文档,其中只有10个受限字段.这将每次返回相同的10个文档,这是意料之中的.

products = await Product.find({
        category: category,
      })
        .select("title img price desc category postageCost")
        .limit(10);

我想在页面加载上显示random products,而Mongoose .sample()方法是完美的,所以我写了以下内容:

products = await Product.find({
        category: category,
      })
        .select("title img price desc category postageCost")
        .sample(10);

不过,我似乎不能让它像我预期的那样工作.相反,我必须运行Product.find().sample(10),然后修改返回的对象,只返回"TITLE IMG PRICE DEC CATEGORY postageCost"字段.

可以用Mongoose组合select()sample()吗?或者我的方法是返回随机字段并限制返回文档内容的唯一方法吗?

推荐答案

您应该使用示例方法和mongoose聚合函数,然后使用项目方法检索特定数据.

    const selectedFeilds = "title img price desc category postageCost";

    Product.aggregate([{ $sample: { size: 10 } }, // Select a random document
  { $project: {...selectedFields.split(' ').reduce((acc, field) => ({ ...acc, [field]: 1 }), {}) } } // Project to select specific fields
])

Javascript相关问答推荐

如何提取Cypress中文本

如何在不分配整个数组的情况下修改包含数组的行为主体?

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

为什么ngModel不能在最后一个版本的Angular 17上工作?'

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

如何使覆盖div与可水平滚动的父div相关?

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

面对代码中的错误作为前端与后端的集成

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

当代码另有说明时,随机放置的圆圈有时会从画布上消失

每次重新呈现时调用useState initialValue函数

打字脚本中方括号符号属性访问和拾取实用程序的区别

如何用javascript更改元素的宽度和高度?

OnClick更改Json数组JSX中的图像源

Node.js错误: node 不可单击或不是元素

是否设置以JavaScript为背景的画布元素?

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

如何使pdf.js上的文本呈现为可选?

需要从对象生成列表

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据