【问题标题】:MongoDB find $and with value of anyMongoDB 找到 $and 任何值
【发布时间】:2021-11-02 11:24:07
【问题描述】:

如何将 find 与 $and 一起使用,并获得一些价值?

例子

let { city, zanr, date } = req.body;

const selectedEvent = await Events.find({
  $and: [{ address: city}, { type: zanr }, { date: datum }],
});

因为在 req.body 中可以是值“all”,这意味着我有时不需要过滤。

有时可以是地址:任意

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query nosql


    【解决方案1】:

    您可以使用基于req.body 的javascript 动态生成查询。
    MQL 查询是JSON,我们可以生成它们、更改它们等。

    例如

    var q;
    
    if(city=="all") q=[{ type: zanr }, { date: datum }];
    else q=[{ address: city}, { type: zanr }, { date: datum }];
    
    const selectedEvent= await Events.find({$and: q});
    

    如果您拥有的不仅仅是城市,您可以为更多可选过滤器执行此操作。

    【讨论】:

      【解决方案2】:

      如果城市全部从and数组中删除{address:city} 或使用{address:{$regex:'.*.'}}

       let { city, zanr, date } = req.body;
      
          const selectedEvent = await Events.find({
            $and: [ {address:{$regex:'.*.'}},{ type: zanr }, { date: datum }],
          });
      

      【讨论】:

      • 谢谢,但我在前端有三个过滤器 City [All, Berlin, New York] 如果有人会选择 zanr [Concerts, Meeting] 如果有人会选择 [Concerts] 和 city [All] 什么我应该这样做吗?
      • 我更新我的答案{address:{$regex:'.*.'}} 表示所有地址
      • 感谢分配!这帮助我使它更灵活:-))
      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      相关资源
      最近更新 更多