前端默认传空字符串,mongodb如何查询所有数据

前端页面如下:
clipboard.png
用vue写的,默认查询发送给后台的数据如下:

email:"",
mis:"",
phone:"",
username:"",

后台node写的,接收之前还是空字符串,如何在数据库中默认查询出所有数据呢?是把以下数据默认都查询出来,而不是制定符合字段为空字符串的相对应字段??
clipboard.png

有没有像如下mysql的语句,判断参数是否为空,全部为空就查全部,有不为空的就带条件查询

clipboard.png

阅读 7k
4 个回答

问题描述的不是很清楚

如果你想做的事情是: 当前端传入的数据为空字符串时,在查询时不对此字段做限制,只对前端传了非空的字段进行限制的话, mongodb的find方法是需要传一个给定值的,传空字符串 会匹配此字段为空的记录, 你需要在执行db查询操作之前,
在nodejs代码中判断字符串是否为空,然后再执行查询语句。

不知是否帮到你,可以留言让我进一步了解你的问题。

补充回答:

以nodejs的express框架action请求为例:

const mongoClient = require('mongodb').MongoClient;
module.exports.get = function (req, res, next) {
    let queryEmail = req.query.email;
    
    mongoClient.connect(url, function (err, db) {
        if (err) throw error;
        let col = db.collection('your_collection');
        if (typeof queryEmail === 'string' && queryEmail.length === 0) {
            col.find({}).toArray(function (err, list) {
                if (err) throw error;
                res.json({
                    data: list
                });
            });
        }
        else {
            col.find({ email: queryEmail }).toArray(function (err, list) {
                if (err) throw error;
                res.json({
                    data: list
                });
            });
        }
        
    });
    
}

以上代码只是帮你打个样,仅对于email这一个字段的查询, 当输入为空字符串时,直接将查询条件设为了空对象,因此不对任何字段做限制输出查询结果;如果email字段里有货,则在查询条件中限制email字段必须符合输入值。
有问题请回复。

var query={};
if(email){
query.email=email
}
if(username){
query.username=username
}
//其他字段同样处理。

意思就是,在判断不为空时再组装限制条件。

不知道楼主解决问题了没有,遇到同样需求通过百度来到这里,搞了好久有了个解决方案,希望可以帮到后面遇到同样问题的人,这里的话我的查询条件是必须要传入年和月,日期为空返回当前年份月份下的所有数据,通过前端传过来的字段判断,代码如下

let day=ctx.query.day==""?{}:{day:ctx.query.day}
    const result = await Wages.find({
        '$or':[
            {'$and':[
                {year:query.year},
                {month:query.month},
                day
            ]}, 
            // {workerName:query.workerName}
         ]
    }).skip(page * pageSize).limit(pageSize)
新手上路,请多包涵

今天遇到了相同的问题,用的解决方案是可以用正则

let regexpTitle = new RegExp(keyWord, 'i')

title: {
    $regex: regexpTitle
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题