在MongoDB中返回数据之前有条件地添加过滤器困境

Posted

技术标签:

【中文标题】在MongoDB中返回数据之前有条件地添加过滤器困境【英文标题】:Conditionally add filter predicaments before returning data in Mongodb 【发布时间】:2021-11-30 02:20:12 【问题描述】:

因为我无法正确表达我想要达到的目标,因为许多主题可能会错误地归入条件过滤 mongodb 查询的术语中。这是我想要实现的目标,

我有一个用户数据库,我正在尝试使用以下数据向我的后端发送搜索查询 "country":"all","category":"all","gender":"all","ageRange":[25, 40]

我正在尝试以编程方式将这些参数添加到我的查询中。例如,

const search = db.collection("users").find();

if (params.country == "ALL") 
    search.addFilter(  country: "..."  )


if (params.age < 18) 
    search.addFilter(  minor : true  )


const data = search.limit(30).toArray();

这样的事情可能吗?当国家等于“全部”时,我不想应用任何过滤器,但如果国家等于某个国家,我想应用那个国家作为过滤器,依此类推。我可以以编程方式添加到过滤器困境吗?

使用Nodejs(Nextjs api),所以javascript和mongodb库

【问题讨论】:

【参考方案1】:
var filters = 
var andObj = []
if (params.country == "ALL") 
    andObj.push(  country: $regex:".*."  )


if (params.age < 18) 
   andObj.push(  minor : true  )

filters['$and'] = andObj
const data = await db.collection("users").find(filters).limit(30).toArray();

var filters = 
var andObj = []
if (params.country != "ALL") 
    andObj.push(  country: params.country )


if (params.age < 18) 
   andObj.push(  minor : true  )

filters['$and'] = andObj
const data = await db.collection("users").find(filters).limit(30).toArray();

【讨论】:

以上是关于在MongoDB中返回数据之前有条件地添加过滤器困境的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb批量过滤并添加连接字段

过滤 MongoDB 中的嵌入式数组

向 eloquent 资源添加过滤器以有条件地附加关系

C#中对SQl数据库进行插入操作,有返回受影响的行数,执行结果是“添加成功”但是在数据困中却没有数据

如何使用 swift 有条件地向 Firebase Firestore 中的查询添加另一个过滤器?

有条件地将 where 子句添加到 eloquent 查询