在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中返回数据之前有条件地添加过滤器困境的主要内容,如果未能解决你的问题,请参考以下文章
C#中对SQl数据库进行插入操作,有返回受影响的行数,执行结果是“添加成功”但是在数据困中却没有数据