【问题标题】:How, if a var exists, create an object or discard the object in the query?如果 var 存在,如何在查询中创建对象或丢弃对象?
【发布时间】:2012-12-19 11:19:36
【问题描述】:

我正在使用 mongodb,使用 ajax 表单,它工作正常...我想丢弃查询中的一些元素。这是代码:

var preVariable=
    {
        precio_alquiler: {$lte:query.price_input_by_user},
        tipo_usuario: query.type_of_user,
    };

db.collection('data').find(preVariable,{_id:0},{safe:true}, function(err, result)

解释:

precio_alquiler 是元素的价格

tipo_usuario 是表单中的一个选择,包含

select(name='type_of_user')
                        option(value="Commerce") Comercio
                        option(value="User") Usuario
                        option(value="Mayorist") Mayor

所以问题是……如果用户想查询一个元素的价格而忽略用户的类型,如何创建查询变量??? 这是一个可以解释问题的例子

var preVariable=
    {
        precio_alquiler: {$lte:query.price_input_by_user},
        tipo_usuario: query.type_of_user || "dont create the object tipo_usuario",
    };

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    一种常见的做法是先用已知属性初始化对象,然后根据输入有条件地添加那些:

    var preVariable = {
        precio_alquiler: { $lte: query.price_input_by_user }
    };
    
    if(query.type_of_user) {
        preVariable.tipo_usuario = query.type_of_user;
    }
    

    【讨论】:

    • 我试图避免条件,因为不是一个对象有很多
    • 那么您肯定有所有可能的属性名称的列表吗?
    【解决方案2】:

    你可以创建不同的对象:

    var preVariable = query.type_of_user ? {
        precio_alquiler: {
            $lte: query.price_input_by_user
        },
        tipo_usuario: query.type_of_user
    } : {
        precio_alquiler: {
            $lte: query.price_input_by_user
        }
    };
    

    【讨论】:

    • 我不太明白,这是一个条件,比如 var foo=1==1?'one':'other else';
    • 哎呀!我喜欢三元运算符,但这太过分了。
    【解决方案3】:

    如果你有很多这些字段,那么这可能比使用条件更好:

    var preVariable = {
        precio_alquiler: {$lte:query.price_input_by_user},
        tipo_usuario: query.type_of_user,
        //... more
    };
    // Remove the undefined fields
    for (var prop in preVariable) {
        if (preVariable[prop] === undefined) delete preVariable[prop];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多