我在MongoDB中有一个这样的查询

collection.find(
    {$and:[
        {origin:{ $in: countries }}, {brand: {$in: brands}}
    ]}
).toArray();

如果数组countriesbrands都有一些值,则查询将正确地返回同时具有指定国家和品牌的文档.但是,如果这些数组中的一个为空,则查询将不再工作.我怎么才能解决这个问题呢?我希望我的用户能够只按国家或品牌搜索,而不是总是两者兼而有之.我也有其他参数,应该可以独立搜索或与其他参数组合.我如何构造一个查询才能给我提供所需的输出?

推荐答案

const query = { $and: [] }; // basic condition (find everything)

if (userRequest.countries?.length > 0) { // if countries is not empty array
  query.$and.push({ origin: { $in: userRequest.countries} })
}

if (userRequest.brands?.length > 0) {
  query.$and.push({ brand: { $in: userRequest.brands} })
}
// other conditions may be added further correspodingly

const result = await collection.find(query);

在上面的例子中,我使用了临时对象userRequest来说明带有过滤输入的对象.主要的 idea 是,你有一个通用的query对象,里面的所有条件都是$and数组(但是你也可以修改query对象).然后,如果用户指定了一些过滤器-你只需要添加相应的条件到条件array.

Javascript相关问答推荐

*ngFor和@代表输入decorator 和选角闭合

将json数组项转换为js中的扁平

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

在vercel throws上部署带有gunjs的sveltekit应用无法找到模块./' lib/文本编码'

JS,当你点击卡片下方的绿色空间,而它是在它的背后转动时,

try 使用javascript隐藏下拉 Select

如何使用JavaScript拆分带空格的单词

如何发送从REST Api收到的PNG数据响应

从页面到应用程序(NextJS):REST.STATUS不是一个函数

在我的index.html页面上找不到我的Java脚本条形图

查询参数中的JAVASCRIPT/REACT中的括号

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

使用jQuery find()获取元素的属性

背景动画让网站摇摇欲坠

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

未找到用于 Select 器的元素:in( puppeteer 师错误)

正则表达式以确定给定文本是否不只包含邮箱字符串

扩散运算符未按预期工作,引发语法错误

如何在单击链接时设置一个JavaScript变量(以打开弹出窗口的特定部分)

JS/css:将数字输入的S函数和可调整大小的元素S函数绑定在一起