Mongoose 动态查询

RaS*_*She 5 mongoose mongodb node.js

从 URL 解析的查询,例如:

?year=2014&cat=sonny
Run Code Online (Sandbox Code Playgroud)

或者它可以是

?year=2014&id=223&something=high&cat=sonny
Run Code Online (Sandbox Code Playgroud)

我可以

Model.find({year: 2014}).where('cat').equals('sonny')
Run Code Online (Sandbox Code Playgroud)

但是如果有第二个例子呢?我怎样才能让它动态?

cdb*_*rin 7

您可以将查询设置为变量并添加多个条件:

var query = Model.find();

query.where('year').equals('2014');
query.where('cat').equals('sonny');
query.where('id').equals('223');
query.where('something').equals('high');
query.exec(callback);
Run Code Online (Sandbox Code Playgroud)

对于动态,只需将查询传递给 for 循环并遍历过滤器对象数组:

var query = Model.find();

var filters = [
    {fieldName: "year", value: "2014"},
    {fieldName: "cat", value: "sonny"}
    ...
];

for (var i = 0; i < filters.length; i++) {
    query.where(filters[i].fieldName).equals(filters[i].value)
}

query.exec(callback);
Run Code Online (Sandbox Code Playgroud)