MongoError:查询选择器必须是一个对象

时间:2017-05-20 09:43:11

标签: node.js mongodb aws-lambda

我正在尝试动态构建一个查询,我可以构建它并将其直接复制并粘贴到控制台中并且可以正常运行。

似乎查询未被识别为我被卡住的对象:(

有没有办法可以将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);
    });
});

1 个答案:

答案 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)

因此,无论在哪个地方,您都要将对象整理成一个字符串,甚至不需要这样做。使用本机对象更有意义。