2016-06-26 4 views
0

Ich möchte eine Mongodb-Sammlung filtern. Das Filterkriterium kommt von einer anderen Sammlung, z. die ID, die von einer Abfragezeichenfolge transportiert wird.node.js, mongo.db, db.collection.find mit Abfrageparameter 1 aus einer Variablen

Wenn die Abfrage-Filter (erster Parameter) es funktioniert gut fixiert ist:

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

Jetzt möchte ich eine Variable statt/575f13cf6eb9d09fdf0f14c2 /.

Ich habe versucht, ein dynamisches Objekt zu verwenden:

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


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

funktioniert nicht. Kann jemand eine Mongodb-Sammlung mit einer Variablen als Eingabe filtern?

Hier einige weitere Informationen: Version MongoDB 3.2.6. Der gesamte Code wie folgt aussieht:

/* 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 
     }); 
    }); 

}); 
+0

Ihr Code unter der Annahme korrekt aussieht nur Sie versuchen, find by fuser (dh mit out regex) Haben Sie mit db.collection.find ("fsuser", "575f13cf6eb9d09fdf0f14c 2 ") auf Mongo Shell, ob Sie Ergebnisse bekommen? – notionquest

+0

Ich versuchte in der Konsole: – Teri

+0

Ich versuchte in der Konsole: 'db.notizcollection.find ({" fsuser ":"/5762620c59a7aef450417047/"}). Pretty()' => kein Fehler, kein Ergebnis, aber ohne Zitat markiert es funktioniert: 'db.notizcollection.find ({fsuser:/5762620c59a7aef450417047 /}). pretty()' funktioniert gut. – Teri

Antwort

0

Soweit ich sehe, dass Sie versuchen, Regex in Ihrer Abfrage zu verwenden, diese

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

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

Funktioniert nicht. Der Fehler hat irgendwie mit den Anführungszeichen zu tun. In der Konsole 'db.notizcollection.find ({fsuser: /5762620c59a7aef450417047/}).pretty()'wird. Sobald ich ein Objekt verwende, gibt es Anführungszeichen. – Teri

+0

Zeigen Sie die Zeichenfolge mit Anführungszeichen –

+0

Anführungszeichen bedeutet, es ist eine Zeichenfolge, nicht Regex –

0

arbeiten sollten Sie RegExp direkt auf Ihre Variable verwenden können.

Die i ist für die Übereinstimmung zwischen Groß- und Kleinschreibung.

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



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

Funktioniert nicht, siehe Kommentar oben. – Teri

+0

Bearbeiten Sie Ihre Frage und zeigen Sie die Daten –

+0

db.notizcollection.find ({fsuser: {$ Regex:/5762620c59a7aef450417047 /}}). Pretty() funktioniert, aber wenn ich eine Variable verwenden möchte, tut es. var meinstring = '5767dc33e9075b97cd98e2f5'; var reg = neue RegExp (meinstring, 'i'); db.notizcollection.find ({fsuser: {$ regex: reg}}). Pretty() funktioniert nicht – Teri

0

Als ich eine Abhilfe für dieses Problem bekam. Appearently collection.find (myFilter) mag es nicht, ‚"‘in den Attributen der JavaScript-Objekte

entschied ich manuell numerischen zu haben (int) Tasten zwei Tabellen verknüpfen. der Index i von req.query holen ist eine Zeichenfolge. Also muss ich von Number() aus der es eine Reihe machen.

/* 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 
     }); 
     }); 
    });