我想过滤一个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
});
});
});
答案 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
});
});
});