猫鼬model.find(filteredQuery)返回空数组

时间:2019-05-24 11:54:57

标签: node.js mongodb variables mongoose find

我有一个与MongoDB通信的Node.js后端,我需要从数据库中过滤掉一些结果。问题是,当我发送查询时,我只会收到一个空数组作为回报。

function setTOQuery() {
            let path;
            let filter;
            let query = {};
            return new Promise((resolve)=> {
                if(params.A.length === 0 ) {
                    path = "booked.services";
                    filter = { '$exists': true };
                    query[path] = filter;
                } else {
                    path = "booked.services.service_id";
                    filter = { '$in': params.A };
                    query[path] = filter;
                }
                resolve(query);
            });
        }

async function retrieveData() {


            const toQ = await setTOQuery();

            CustomerModel.find({
                toQ
            }, (err, docs) => {
                    if(err) console.log(err);
                    console.log(toQ);
                    console.log(docs);
                    res.status(200).send(docs);
                    return docs;
            })
        }

        retrieveData();

console.log(toQ)返回{ 'booked.services': { '$exists': true } }

所以我不明白这里出了什么问题。通过这两个查询,我都只会收到[]。我怀疑使用async / await出错了,但是我不知道到底是什么。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

如果console.log(toQ)返回{ 'booked.services': { '$exists': true } }

然后toQ已经是一个对象,您应该在没有键的情况下使用它,例如:

CustomerModel.find(
                toQ
            , (err, docs) => {
                    if(err) console.log(err);
                    console.log(toQ);
                    console.log(docs);
                    res.status(200).send(docs);
                    return docs;
            })