Я беру онлайн-курс, и у меня проблема с запросом. В оболочке работает нормально, но при запуске js файла я получаю сообщение об ошибке: неизвестный оператор: $ или. Это код revelant:
var allOptions = [
{
overview: "wiki",
},
{
milestones: "CMO"
}
];
А затем в функции запроса:
var query = {};
if ("overview" in options) {
query.overview = { "$or": [{"overview": {"$regex": options.overview, "$options": "i"}},
{"tag_list": {"$regex": options.overview, "$options": "i"}}] }
И в оболочке, если я запрошу вот так:
db.companies.find({ $or: [{"overview": {"$regex": "wiki"}}, {"tag_list": {"$regex": "wiki"}}] }).count();
Я получаю результат. Что я делаю неправильно? Любая помощь будет оценена
Вам нужно .find()
правильный элемент:
var allOptions = [ { "overview" : "wiki" }, { "milestones" : "CMO" } ]
var query = { };
if ( allOptions.find( o => o.overview ) ) {
var overview = allOptions.find(o => o.overview ).overview;
// returns "wiki"
query.$or = [
{"overview": {"$regex": overview, "$options": "i"}},
{"tag_list": {"$regex": overview, "$options": "i"}}
];
// query is now like
// { "$or": [{"overview": {"$regex": "wiki", "$options": "i" }}, {"tag_list": {"$regex": "wiki", "$options": "i" }}]
}
Company.find(query,function(err,results) {
console.log(results);
})
Вам нужно использовать $ или как первое свойство запроса, как в запросе, который вы создали для оболочки.
Например:
query.$or = [ {"overview": {"$regex": overview, "$options": "i"}}, {"tag_list": {"$regex": overview, "$options": "i"}} ]
options
как значение 'wiki'
в первую очередь. Это то, что я уже исправил.
var allOptions = [ { overview: "wiki", }, { milestones: "CMO" } ]; var numQueriesFinished = 0; var companiesSeen = {}; for (var i=0; i<allOptions.length; i++) { var query = queryDocument(allOptions[i]); queryMongoDB(query, i); }
Так что на самом деле проблема заключалась в использовании query.overview
вместо query.$or
query
в своем вопросе. Вы делаете что-то еще неправильно, а также строительство. Я исправил конструкцию и также показал, как правильно передать аргумент.