如何使用mongoose处理多个字段名和值作为变量"其中"方法?

时间:2014-07-27 14:57:33

标签: javascript node.js mongoose

我使用where方法将字段名和值传递给Mongoose fineOne查询。

Model.findOne().where(field1,value1).where(field2, value2).exec(function(err,callback) {
   ...
}

以上作品发现。但是,我的问题是我们有更多的字段名和值要传递给上面的语句。我不确切知道fieldname的数量和要使用的值,因为它取决于用户的配置。我喜欢使用for循环动态构建where子句,但不知道如何。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您可以为条件创建变量:

var conditions = {};
for (i = 1; i < 3; i++) { 
    conditions['field' + i] = 'value' + i;
}

conditions对象将如下所示:

console.log(conditions);
Object {field1: "value1", field2: "value2"} 

这个for循环当然只是一个例子,你可以使用一种循环来构建对象。然后,您可以通过以下方式执行findOne()查询:

Model.findOne(conditions, function(err, item) {
  // ...
});

答案 1 :(得分:0)

假设一个values对象包含您要保存的字段的值,并且fields数组包含要保存的字段的名称,您可以这样做:

var values = {p_last_name: 'Smith', p_first_name: 'John', ... };
var fields ['p_last_name', 'p_first_name'];

var query = Model.findOne();
for (var i=0; i<fields.length; ++i) {
    var field = fields[i];
    query.where(field, values[field]);
}
query.exec(callback);