有任何方法可以动态链接查询吗?
例如,给定以下GET请求
/collection?field1=value1&field2=value2&sort=field3 asc没有排序查询是很容易的
/collection?field1=value1&field2=value2var query = {}
for (var key in query) {
query[key] = req.query[key]
}
Collection.find(query)但是,如果有可选的查询键,例如排序、展开和选择分别到Collection.sort、Collection.populate、Collection.select的映射,那么如何构建GET请求?
换句话说,假设您有一个查询方法的动态数组:
queries = [populate, select, sort]解决办法是否如下:
var query = Collection.find()
for (var q in queries)
query = query.q发布于 2021-11-22 02:01:08
您只需迭代查询参数,并分离出操作和实际查询条件的参数。用你的例子:
// sample data for req.query
const req = {
query: {
sort: "field9",
field1: "someValue",
field2: "otherValue",
field3: "highValue"
}
};
const queries = new Map();
const operations = new Map([
["populate", false],
["sort", false],
["select", false]
]);
for (const [key, value] of Object.entries(req.query)) {
if (operations.has(key)) {
operations.set(key, value);
} else {
queries.set(key, value);
}
}
// here:
// queries contain the non-operation pairs
// operations (if not false) contain the operation value such
// as sort => "field9"
console.log("operations:");
for (let [key, value] of operations.entries()) {
console.log(`${key} => ${value}`);
}
console.log("queries:");
for (let [key, value] of queries.entries()) {
console.log(`${key} => ${value}`);
}
要运行该操作,您必须检查存在哪些操作,并根据存在哪些操作来分支代码和查询。
https://stackoverflow.com/questions/70059837
复制相似问题