问题描述
我正在创建一个查询,但是当我不知道该怎么做时,我来到了一个部分。我有一个数组,例如有两个项目
//filter array
const filterarray=r.expr(['parking','pool'])
而且我还有一张表,其中包含以下记录:
[
{
"properties": {
"facilities": [
"parking"
],"name": "Suba"
}
},{
"properties": {
"facilities": [
"parking","pool","pet friendly"
],"name": "Kennedy",}
},"pool"
],"name": "Soacha"
}
},"pet friendly","GYM"
],"name": "Sta Librada"
}
},]
我需要使用数组过滤记录,但我需要该记录具有数组过滤器的所有项目。如果记录有更多的数组过滤器项目不是问题,我需要如果包含数组过滤器的所有项目获取该记录。在这种情况下,我需要所有具有“游泳池”和“停车场”设施的记录
当前查询
当前查询,但它也返回包含过滤器数组中的一项或两项的记录
r.db('aucroom').table('hosts')
.filter(host=>
host('properties')('facilities').contains(val=>{
return filterarray.contains(val2=>val2.eq(val))
})
)
.orderBy('properties')
.pluck(['properties'])
我渴望等待的结果
像图片示例:
解决方法
如果你想严格匹配两个数组(相同数量的元素,相同的顺序),那么使用.eq()
array1.eq(array2)
如果你想让第一个数组包含第二个数组的所有元素,那么使用.setIntersection()
,只需注意array2应该包含不同的元素(一个集合):
array1.setIntersection(array2).eq(array2)