2017-03-28 9 views
2

私は、 '/ api/jobs /'のgetメソッドでexpressを実行しているNodeJSサーバを持っています。呼び出されると、urlからいくつかのクエリ文字列のパラメータが取得され、MongoDBデータベースに対してクエリを作成してジョブを取得します。NodeJS 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で動的にクエリを実行します。私が試みたどんな試みも$やプロパティは適切な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' 

分割をし、整数として解析:

答えて

2

まず文字列になりますクエリのプロパティを取得

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は同じです。

+1

それでした!ありがとう – Jareth

0

あなたはこの

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 mongoquerry = {}; 

    for (var i in queryArry) { 

    mongoquerry[queryArry[i].name] = queryArry[i].value; 

} 
    res.send(mongoquerry); 
}); 

を使用することができますが、この場合には、あなたはそれが完全に動的クエリー・ビルダーでこれをしたkey.If同じのMongoDBの名前フィールドとクエリパラメータを送信する必要があります。