2017-06-16 43 views
1

我正在參加在線課程,並且遇到查詢問題。在外殼工作正常,但運行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(); 

我得到一個結果。我究竟做錯了什麼?任何幫助,將不勝感激

+0

需要被'選項[0] .overview',因爲它是在陣列中。或者['.find()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find?v=example)匹配數組中的元素Point你是不是在引用結構中的正確元素? –

+0

@Neil Lunn,改變你的建議'query.overview = {「$ or」:[{「overview」:{「$ regex」:options [0] .overview,「$ options」:「i」}}, {「tag_list」:{「$ regex」:options [0] .overview,「$ options」:「i」}}]} .overview',我得到這樣的信息:TypeError:Can not read property'overview'未定義' – Mellville

+0

通過示例添加了答案。 –

回答

1

您需要.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); 
}) 
+0

@Mellville顯示你如何在你的問題中傳遞'query'。你和建築一樣做着其他錯誤。我已經糾正了結構,並向您展示瞭如何正確傳遞參數。 –

+0

現在它的工作原理,感謝解決方案和解釋:) – Mellville

0

你需要在你的shell內置的查詢使用$或作爲第一查詢屬性,就像。

例如:

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

+0

沒有。問題中的代碼首先不能正確地將'options'作爲''wiki''的值來獲取。這就是我已經糾正的。 –

+0

我認識到這個問題,所以我已經回到去看一看,和代碼的使用的完整的上下文是: 'VAR allOptions = [ { 概述:「維基」, },{ 里程碑:「CMO」 } ]; var numQueriesFinished = 0; var companiesSeen = {}; (var i = 0; i

+0

多德的使用。它已經被糾正了。以前的過程是不正確的,這也是糾正。 –