首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态链接查询

动态链接查询
EN

Stack Overflow用户
提问于 2021-11-22 00:48:38
回答 1查看 32关注 0票数 0

有任何方法可以动态链接查询吗?

例如,给定以下GET请求

代码语言:javascript
复制
/collection?field1=value1&field2=value2&sort=field3 asc

没有排序查询是很容易的

代码语言:javascript
复制
/collection?field1=value1&field2=value2
代码语言:javascript
复制
var query = {}
for (var key in query) {
    query[key] = req.query[key]
}

Collection.find(query)

但是,如果有可选的查询键,例如排序、展开和选择分别到Collection.sort、Collection.populate、Collection.select的映射,那么如何构建GET请求?

换句话说,假设您有一个查询方法的动态数组:

代码语言:javascript
复制
queries = [populate, select, sort]

解决办法是否如下:

代码语言:javascript
复制
var query = Collection.find()
for (var q in queries)
    query = query.q
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-22 02:01:08

您只需迭代查询参数,并分离出操作和实际查询条件的参数。用你的例子:

代码语言:javascript
复制
// 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}`);
}

要运行该操作,您必须检查存在哪些操作,并根据存在哪些操作来分支代码和查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70059837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档