Mongoose - 字符串数组属性中包含的字符串

时间:2016-12-19 14:04:26

标签: javascript node.js mongodb mongoose

我有一个看起来像这样的模型:

  

{     包括:['abc','bcd','c']   }

Schema看起来像这样:

  

新架构({included:[String]});

现在我想创建一个查询,找到集合中的所有元素,其中'included'数组中的所有字符串都包含动态字符串。在这个示例中,如果动态字符串是'abcd',则文档将在结果中,因为所有字符串都包含在其中。

但是如果我的动态字符串是'abdc',那么它将不再是我的查询的重复。

1 个答案:

答案 0 :(得分:0)

您可以使用$where运算符,如下所示

注意:included被视为模型中的字段,您可以根据需要对其进行微调。

var textToSearch = 'abcd';

Collection.find(
    { 
       $where: function() {
         var hasText = false;
         var included = this.included;

         for(var i = 0; i < included.length; i++) {
            if(textToSearch.indexOf(included[i]) > -1) {
               hasText = true;
            }

            if(hasText) {
               break;
            }
         }

         return hasText;
       }
    }
);

如果需要,如果要检查数组中的所有字符串,可以更改for循环,

     var hasText = true;
     var included = this.included;

     for(var i = 0; i < included.length; i++) {
        hasText = textToSearch.indexOf(included[i]) > -1;

        if(!hasText) {
           break;
        }
     }