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

发布于 2022-09-06 19:39:38 字数 668 浏览 15 评论 0

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

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

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

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

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

囚我心虐我身 2022-09-13 19:39:38

问题描述的不是很清楚

如果你想做的事情是: 当前端传入的数据为空字符串时,在查询时不对此字段做限制,只对前端传了非空的字段进行限制的话, 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字段必须符合输入值。
有问题请回复。

情未る 2022-09-13 19:39:38
var query={};
if(email){
query.email=email
}
if(username){
query.username=username
}
//其他字段同样处理。

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

烟酉 2022-09-13 19:39:38

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

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)
一个人的旅程 2022-09-13 19:39:38

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

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

title: {
    $regex: regexpTitle
},
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文