簡體   English   中英

NodeJS MongoDB 動態查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM