$或操作符在节点中不被识别

我参加了一个在线课程,并且遇到查询问题。 在shell工作正常,但运行js文件时,我得到一个错误:未知的运算符:$或。 这是相关代码:

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"}}] } 

而在shell中,如果我这样查询:

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

您需要使用$或作为第一个查询属性,就像在您为shell构build的查询中一样。

例如:

query.$or = [ {"overview": {"$regex": overview, "$options": "i"}}, {"tag_list": {"$regex": overview, "$options": "i"}} ]