我使用where
方法将字段名和值传递给Mongoose fineOne查询。
Model.findOne().where(field1,value1).where(field2, value2).exec(function(err,callback) {
...
}
以上作品发现。但是,我的问题是我们有更多的字段名和值要传递给上面的语句。我不确切知道fieldname的数量和要使用的值,因为它取决于用户的配置。我喜欢使用for循环动态构建where子句,但不知道如何。有人可以帮忙吗?
答案 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);