簡體   English   中英

流星從參數傳遞MongoDB選擇器

[英]Meteor passing MongoDB selector from parameter

我要查詢的內容與舊式rdbms中的LIKE一樣,因此我必須為此使用某種正則表達式。

當我嘗試這個,它工作正常

Countdowns.find({"name":{ "$regex": /ANW/ }},{ sort: {regDate: -1 }});

該值正確返回。 但是,當我構建mongoDb選擇器(該函數的第一個JSON參數)時,它將永遠無法工作。

var key = Session.get('searchKey');
var field = Session.get('searchField');
var temp = '{"'+ field +'":{ "$regex": /'+key+'/ }}';

var selector = JSON.parse(JSON.stringify(temp));
Countdowns.find(selector,{ sort: {regDate: -1 }});

當我對其進行測試時(在JSON.parse中使用try-catch),該JSON對象的構建沒有任何錯誤,但是以某種方式(當我將其作為變量傳遞時,該函數( find() )無法運行)。

還有其他構建選擇器的方法嗎?

我已經在控制台上進行了測試,這就是我得到的。

選擇器是一個字符串,您需要一個RegExp

嘗試這樣

  var key = Session.get('key'), field = Session.get('field');
  var selector = {}; 
      selector[field] = { $regex : new RegExp(key) };

有了這個,您將獲得:

使用新的RegExp('string')

這對於minimongo應該是可以接受的。


為什么JSON.parse無法正常工作? 在您傳遞temp一點上,它看起來像:

字符串中的字符串

在將其傳遞給JSON.stringify之前,您已經有一個字符串。 可是等等! 您會說,如果我改為將其傳遞給JSON.parse ,它將起作用嗎? 讓我們看看:

正斜杠的格式不正確

不。 正斜杠必須正確設置格式,即使這樣,您仍將獲得$regex的字符串,並且需要RegExp對象

即使格式化,您也會得到一個看起來像RegExp的字符串

因此,最終這樣做的方式就是我之前寫給您的。 首先,您將定義一個變量,該變量將數據庫的選擇器保存為一個對象,並以此構造selector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM