簡體   English   中英

如何創建支持空值並返回所有值的貓鼬查詢

[英]How to create a mongoose query that supports empty values and returns all

用戶有一個表單來填寫和搜索 mongoDB 集合中的文檔。 用戶不需要填寫表單的所有輸入,但用戶填寫的需要一起查詢。 用戶未填寫的輸入作為 "" 空字符串進入后端。

我的查詢是這樣的:

let cf = await Cf.find({
            $and: [
                {userId: userId},
                {$and: [
                    {name: name == '' ? null : name},
                    {catg: catg == '' ? null : catg},
                    {value: value == '' ? null : value}
                ]}
            ]
        });

因此,對於查詢,我設置了一個條件,如果值等於 "" 則將其更改為null ,但貓鼬實際上是在搜索空值。 是否有某種空占位符可以取回所有文檔? 如果我保留為空字符串或將其更改為undefined它也不起作用。

如果用戶留下了一些空白字段,最好的方法是什么?

更新

使用mickl 的邏輯和一些調整,它完美地工作。 這是最終結果。

        let query = {
                    $and: [
                        {userId: userId}
                    ]
                };

        let subQuery = [];

        if (name !== ''){
            subQuery.push({name: name})
        };

        if (catg !== ''){
            subQuery.push({catg: catg})
        };

        if (value !== ''){
            subQuery.push({value: value})
        };

        if( name !== '' || catg !== '' || value !== ''){
            query.$and.push({$and: subQuery})
        };

        let cf = await Cf.find(query);

如果該值為空,則它不能包含在您的查詢中,請在點擊.find()之前嘗試應用此查詢構建邏輯:

 let userId = 1, name = 'a', catg = '', value = ''; let query = { userId: userId }; if(name !== ''){ query.name = name; } if(catg !== ''){ query.catg = catg; } if(value !== ''){ query.value = value; } console.log(query);

let cf = await Cf.find(query);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM