有沒有辦法動態鏈接查詢?
例如,給定以下 GET 請求
/collection?field1=value1&field2=value2&sort=field3 asc
沒有排序查詢很容易
/collection?field1=value1&field2=value2
var query = {}
for (var key in query) {
query[key] = req.query[key]
}
Collection.find(query)
但是,如果有可選的查詢鍵,例如 sort、expand 和 select 分別對應到 Co??llection.sort、Collection.populate、Collection.select 的映射,我該如何構建 GET 請求?
換句話說,假設您有一個動態的 Query 方法陣列:
queries = [populate, select, sort]
解決方案是否如下:
var query = Collection.find()
for (var q in queries)
query = query.q
uj5u.com熱心網友回復:
您只需遍歷查詢引數并將操作與實際查詢條件分開。使用您的示例:
// 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://www.uj5u.com/gongcheng/362974.html
上一篇:專案欄位默認值不存在
