node.js,mongo.db,db.collection.find,变量中带有查询参数1

时间:2016-06-26 19:48:03

标签: node.js mongodb filtering

我想过滤一个mongodb集合。过滤标准来自另一个集合,例如。由查询字符串传输的id。

如果查询过滤器(第一个参数)是固定的,它可以正常工作:

collection.find({fsuser:/575f13cf6eb9d09fdf0f14c2/},{},function(e,docs){  
    res.render('notiz_tabelle', {
        "notiz_tabelle": docs
    });
});  //Ende find()

现在我想要一个变量而不是/ 575f13cf6eb9d09fdf0f14c2 /。

我尝试使用动态对象:

//Dynamisches Objekt
var dynQueryObjekt = {};
dynQueryObjekt["fsuser"] = "/575f13cf6eb9d09fdf0f14c2/";


collection.find(dynQueryObjekt,{},function(e,docs){  
    res.render('notiz_tabelle', {
        "notiz_tabelle": docs
    });
});  //Ende find()

不起作用。有人知道如何使用变量作为输入过滤mongodb集合吗?

这里有一些进一步的信息:版本MongoDB 3.2.6。整个代码看起来像:

/* GET Notizen DB page. */
router.get('/notiz_tabelle', function (req, res) {
    var db = req.db;

//Query-String auslesen
    var qstring1 = req.query;


   console.log("Mitteilung");
   //von JSON in String wandeln
    var jsonString = JSON.stringify(qstring1);
    console.log("Query-String: " + jsonString);

    //Hash aus String kopiren
    var subString = jsonString.substring(11, 35);

    console.log("Teilstring: " + subString);

   var collection = db.get('notizcollection');
    //String in Befehl kopieren, wie??
    jsonString = '{fsuser:/' + subString + '/}';

    console.log("Json String: " + jsonString);

    //Dynamisches Objekt
    //var dynQueryObjekt = {};
    //dynQueryObjekt["fsuser"] = "/575f13cf6eb9d09fdf0f14c2/";

   // console.log("Dyn Objekt: "+JSON.stringify(dynQueryObjekt));


     var dynQueryObjekt = {};
     dynQueryObjekt["fsuser"] = new RegExp("/5762620c59a7aef450417047/", 'i'); 



    //var jsonAusdruck=JSON.parse(jsonString);    
    //console.log("JSON Ausdruck: "+JSON.stringify(jsonAusdruck));


var someInput = '/5762620c59a7aef450417047/';
var reg = new RegExp(someInput, 'i');


//collection.find(jsonString, {}, function (e, docs) {
//collection.find({fsuser: /#{subString}/}, {}, function (e, docs) {
//collection.find({fsuser:/5762620c59a7aef450417047/},{},function(e,docs){     //funktioniert
//collection.find({"fsuser":"/5762620c59a7aef450417047/"},{},function(e,docs){  //fkt nicht, nur ohne Anf. Zeichen
    collection.find(dynQueryObjekt, {}, function (e, docs) {
//collection.find({fsuser: {$regex: reg}}, {}, function (e, docs) {
        res.render('notiz_tabelle', {
            "notiz_tabelle": docs
        });
    });

});

3 个答案:

答案 0 :(得分:0)

据我所知,您正在尝试在查询中使用Regex,这应该可以正常工作

var someInput = '575f13cf6eb9d09fdf0f14c2';
var reg = new RegExp(someInput, 'i');

collection.find({fsuser: {$regex: reg}}, function(e, docs){  
    res.render('notiz_tabelle', {
        "notiz_tabelle": docs
    });
});

答案 1 :(得分:0)

您可以直接在变量上使用RegExp。

i 用于不区分大小写的匹配。

var dynQueryObjekt = {};
dynQueryObjekt["fsuser"] = new RegExp("575f13cf6eb9d09fdf0f14c2", 'i'); 



collection.find(dynQueryObjekt,{},function(e,docs){  
    res.render('notiz_tabelle', {
        "notiz_tabelle": docs
    });
});  //Ende find()

答案 2 :(得分:0)

当我得到这个问题的解决方法时:显然,collection.find(myFilter)不喜欢'"'在JavaScript对象的属性中。

我决定使用手动数字(int)键来连接两个表。我通过req.query获取的索引是一个字符串。所以我必须通过Number()创建一个数字。

/* GET Notizen DB page (routes/index.js */
router.get('/notiz_tabelle', function (req, res) {
    var db = req.db;

    //Read Query String from other page
    var queryObjekt = req.query;  //read Query-Objct
    var zahl=queryObjekt["fsuser"];  //Read Number-String from JSON-Object 
    console.log("Wert "+zahl);
    wert=Number(zahl); //String to Number

    var queryString=JSON.stringify(queryObjekt);
    console.log("Query-String: "+queryString);    

    var collection = db.get('notizcollection');   

    //First parameter of find() is Filter, must be Numeric, not String
    collection.find({fsuser:wert}, {}, function (e, docs) {  
        res.render('notiz_tabelle', {
            "notiz_tabelle": docs
        });
      });
   });