我正在尝试动态构建一个查询,我可以构建它并将其直接复制并粘贴到控制台中并且可以正常运行。
似乎查询未被识别为我被卡住的对象:(
有没有办法可以将query
字符串转换为mongodb可以识别的对象?
这用于nodejs 6.10
var string = "tag1,tag2".split(",").map(function (a) { return new RegExp('^' + a) }).join(", ");
var query = '{ "optionsSearch": { "$all": [ ' + string + ' ] } }';
// this is my desired query below, if I copy and paste this straight into the query it works?
console.log(query); ///<- { "optionsSearch": { "$all": [ /^tag1/, /^tag2/ ] } }
mongodb.MongoClient.connect('mongodb://*******:*****@aws-eu-west-1-portal#####', function (err, db) {
console.log("Connected to mongo");
var minidealers = db.collection('collection1');
minidealers.find(query) //<- FAILS MongoError: query selector must be an object
.limit(100)
.toArray(function (err, items) {
console.log(items);
});
});
答案 0 :(得分:1)
那么你可以使用JSON.parse
:
minidealers.find(JSON.parse(query))
但实际上你应该首先使用JavaScript对象。
var query = {
"optionsSearch": {
"$all": "tag1,tag2".split(",").map(function (a) { return new RegExp('^' + a) })
}
};
// And then
minidealerts.find(query)
因此,无论在哪个地方,您都要将对象整理成一个字符串,甚至不需要这样做。使用本机对象更有意义。