【问题标题】:Buildfire - Using regex in searchBuildfire - 在搜索中使用正则表达式
【发布时间】:2017-08-14 22:36:35
【问题描述】:

我一直在查看文档,但似乎无法弄清楚如何为 buildfire.datastore.search 查询正确创建 filter 对象。

我的对象上有一个 address 属性,我希望能够输入部分地址并让它返回。以下是我尝试传递给搜索查询的过滤器对象:

search = {filter: {"$json.address": {"$regex": `/${this.state.search}/`}}};

search = {filter: {'$regex': {'$json.address': this.state.search}}};

两者都没有奏效。最终目标是:

buildfire.datastore.search(search, 'location', cb);

编辑:

我什至尝试在文档中硬编码正则表达式:

"$or" : [
  {"description": {"$regex":"/new /"}}
]

但它不起作用(我用我知道会显示的字符串替换了“新”)。

【问题讨论】:

    标签: buildfire


    【解决方案1】:

    我刚刚在控件端插入了以下内容:

    for(let i = 0 ; i < 50 ; i++) {
        buildfire.datastore.insert({
            name: "Address" + i
            ,address: i + " " + (i % 2 ? "Main ":"4th ") + (i % 3 ? "ave":"st" )
        },function(){});
    }
    

    然后像这样在小部件端进行搜索:

    <body>
    <input type="text" id="criteria" /><button onclick="search()">Search</button>
    <div id="results"></div>
    <script>
        function search(){
            var cri = document.getElementById("criteria").value;
    
            buildfire.datastore.search( {filter:{"$json.name": {"$regex": cri  }  } } , function(err,results){
                document.getElementById("results").innerHTML = JSON.stringify(results);
            });
        }
    </script>
    </body>
    

    工作正常。如果您希望搜索更复杂,那么您需要修改正则表达式语句,例如不区分大小写。

    希望对你有帮助

    【讨论】:

    • 文档显示您必须,或者至少看起来必须在搜索参数周围加上斜线。在 Mongo 文档中,他们也这样做。但是,在您的示例中,以及现在适用于我的项目的方法中,您只需传递一个字符串。正斜杠会破坏您的搜索
    • 首先DataStore 不完全是 mongoDB。但是,它是以类似的方式构建的。据说,斜线只是为了表明您是否使用正则表达式。例如:prop:"text" 表示 prop 必须完全是“文本”。但是,prop: /text/g 表示您希望它包含“文本”。在 SQL 中它将是 prop ="text"prop like "%text%"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2011-09-02
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多