[英]NodeJS MongoDB Dynamic Query
我有一個 NodeJS 服務器運行 express,在“/api/jobs/”中有一個 get 方法。 當被調用時,我從 url 獲取一些查詢字符串參數,然后他們對 MongoDB 數據庫進行查詢以獲取工作。
Example Url: '/api/jobs/?Groups=1,2&Statuses=3,4'
我試圖構建的 MongoDB 查詢是這樣的:
{ $or: [{"Group.Id" : 1}, {"Group.Id" : 2}], $or: [{"Status.Id": 3}, {"Status.Id": 4}]}
如果我直接對數據庫運行它,我會得到我需要的結果,但我想不出在 JavaScript 中動態構造查詢的方法。 我所做的任何嘗試都會給我一個這樣的對象,因為 $or 屬性只能在正確的 JSON 對象中存在一次。
{$or : [{"Group.Id" : 1}, {"Group.Id" : 2}]}
關於如何使用 JavaScript 或通過 MongoDB Node API 執行此操作的任何想法?
首先獲取查詢屬性,這將是字符串:
const groupString = req.query.Groups; // === '1,2'
const statusString = req.query.Statuses; // === '3,4'
在逗號處拆分並解析為整數:
const groupNums = groupString.split(',').map(parseInt); // === [1, 2]
const statusNums = statusString.split(',').map(parseInt); // === [3, 4]
然后搜索任何組 ID。 您的查詢應如下所示:
const query = {"Group.Id": { $in: groupNums }, "Status.Id": { $in: statusNums } };
對狀態 ID 執行相同的操作。
你可以用這個
app.get('/', function(req, res, next) {
var queryArry = [];
for (var i in req.query) {
var sampleObject = { value: [] };
sampleObject.name = i;
req.query[i].split(',').forEach(function(each) {
sampleObject.value.push(parseInt(each));
})
queryArry.push(sampleObject);
}
var mongoquery = {};
for (var i in queryArry) {
mongoquery[queryArry[i].name] = queryArry[i].value;
}
res.send(mongoquery);
});
但在這種情況下,您必須發送 MongoDB 的同名字段和查詢參數鍵。 如果你這樣做了,它就是完全動態的查詢構建器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.