我有一个看起来像这样的模型:
{ 包括:['abc','bcd','c'] }
Schema看起来像这样:
新架构({included:[String]});
现在我想创建一个查询,找到集合中的所有元素,其中'included'数组中的所有字符串都包含动态字符串。在这个示例中,如果动态字符串是'abcd',则文档将在结果中,因为所有字符串都包含在其中。
但是如果我的动态字符串是'abdc',那么它将不再是我的查询的重复。
答案 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;
}
}