$或操作符在节点中不被识别
我参加了一个在线课程,并且遇到查询问题。 在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"}} ]