Mongoose Find函数,有没有一个$的值无论如何都是真的? [英] Mongoose find function, is there a value for $in which would be true no matter what?

查看:24
本文介绍了Mongoose Find函数,有没有一个$的值无论如何都是真的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很抱歉提出的问题表述不当。
代码如下:

module.exports.getUserByQuery = function (params, callback) {
  if (params.nationality.length !== 0 && params.languages.length !== 0) {
    User.find(
      {
        age: {
          $gt: params.minAge,
          $lt: params.maxAge,
        },
        nationality: { $in: paramas.nationality},
        languages: { $in: params.languages },
      },
      callback
    );
  } else if (params.nationality.length === 0 && params.languages.length === 0) {
    User.find(
      {
        age: {
          $gt: params.minAge,
          $lt: params.maxAge,
        },
      },
      callback
    );
  } else if (params.nationality.length !== 0 && params.languages.length === 0) {
    User.find(
      {
        age: {
          $gt: params.minAge,
          $lt: params.maxAge,
        },
        nationality: { $in: params.nationality },
      },
      callback
    );
  } else if (params.nationality.length === 0 && params.languages.length !== 0) {
    User.find(
      {
        age: {
          $gt: params.minAge,
          $lt: params.maxAge,
        },
        languages: { $in: params.languages },
      },
      callback
    );
  }
};
如果网站用户没有在搜索引擎中选择值,Params.National和Language可以是空字符串数组。
我是否可以为它们设置一个值,使过滤表现得就像它不存在一样?
我基本上是在寻找一种方法来消除IF。

推荐答案

我认为您无法完全消除这些条件,但您可以将代码构建为更易于管理(例如):

let params = { minAge: 10, maxAge: 12, nationality: [ ], languages: [ ] }

const filterBuilder = function(params) {

    const f1 = {
        age: {
            $gt: params.minAge,
            $lt: params.maxAge
        }
    }
    const f2 = { nationality: { $in: params.nationality } }
    const f3 = { languages: { $in: params.languages } }

    if (params.languages.length !== 0 && params.nationality.length !== 0) {
         Object.assign(f1, f2, f3);
    } else if (params.languages.length !== 0) {
         Object.assign(f1, f3);
    } else if (params.nationality.length !== 0) {
         Object.assign(f1, f2);
    }

    return f1;
}

User.find(filterBuilder(params), callback);

这篇关于Mongoose Find函数,有没有一个$的值无论如何都是真的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆