2016-01-06 49 views
1

我正在构建一个网站,使用angularJs和mongoDB with restheart构建数据库。如何触发restheart过滤器?

enter image description here

我的输入是这样写的,

 <th><input types="number" ng-model="GeneN" ng-change="change()"></th> 
     <th><input types="number" ng-model="Des" ng-change="change()"></th> 
     <th><input types="number" ng-model="Org" ng-change="change()"></th> 
     <th><input types="number" ng-model="Site" ng-change="change()"></th> 

我的过滤参数是

$scope.change = function(){ 
     $http.get("http://localhost:3000/pupdb/pupdb/?count&pagesize=10&filter={'uniprot_AC':{'$regex':'(?i)"+$scope.UniP+".*'},'gene_name':{'$regex':'(?i)"+$scope.GeneN+".*'},'species':{'$regex':'(?i)"+$scope.Org+".*'},'description':{'$regex':'(?i)"+$scope.Des+".*'},'site':{'$regex':'(?i)"+$scope.Site+".*'}}") 

事实证明,我必须输入文本或空白在所有5个输入区域之前,我可以激活过滤器并返回结果。之后,我只能在一个区域输入,另外4个空白,结果显示。似乎只有一个输入不足以触发过滤器。

我尝试使用ng-init并使用一个空格并且没有一个空格,但它根本不工作。只有在ng-init中有一个字符时,它才会触发过滤器。

我在想如果restheart过滤器中的“或”参数能够解决问题吗?如果是这样,请让我知道如何写。

我该怎么办才能解决这个问题?

回答

0

将几个值传递给过滤器 qparam实际上将使用AND运算符链接它们。

如果你要使用或尝试像(我没有测试过):

$http.get("http://localhost:3000/pupdb/pupdb/?count&pagesize=10&filter={'$or': [{ "description" : { "$regex" : "(?i)\"+$scope.Des+\".*" }}, { "gene_name" : { "$regex" : "(?i)\"+$scope.GeneN+\".*" }}, { "site" : { "$regex" : "(?i)\"+$scope.Site+\".*" }}, { "species" : { "$regex" : "(?i)\"+$scope.Org+\".*" }}, { "uniprot_AC" : { "$regex" : "(?i)\"+$scope.UniP+\".*" }}]") 

https://docs.mongodb.org/manual/reference/operator/query/or/

相关问题