如何获取查询应适用于文档内部数组的集合。
文档示例:我想知道如何查询品牌为fiat
和seat
的文档
{
"name":"test 1",
"brands":[
{
"brand":{
"id":1,
"name":"Fiat",
"slug":"fiat",
"image":null,
"year_end":null,
"year_start":null
},
"released_at":"2018-10-26"
},
{
"brand":{
"id":2,
"name":"Seat",
"slug":"seat",
"image":null,
"year_end":null,
"year_start":null
},
"released_at":"2018-10-26"
},
{
"brand":{
"id":3,
"name":"Mercedes",
"slug":"mercedes",
"image":null,
"year_end":null,
"year_start":null
},
"released_at":"2018-10-26"
},
{
"brand":{
"id":4,
"name":"Yamaha",
"slug":"yamaha",
"image":null,
"year_end":null,
"year_start":null
},
"released_at":"2018-10-26"
}
]
}
我尝试过类似的操作:
.collection("motors")
.where("brands.slug", "array-contains-any", ["fiat", "seat"])
但是这不起作用,我无法通过documentation弄清楚如何获得它。
答案 0 :(得分:0)
使用array-contains-any
运算符时,可以对照String类型的属性值和 not 数组类型的属性值来检查数组的值。当前无法在数组上使用array-contains-any
运算符。有两种选择,一种是创建两个单独的字段并创建两个单独的查询,或者只是一个文档,您可以获取整个文档并在客户端上过滤数据。
编辑:
@FrankvanPuffelen评论的是正确的,我进行了一些研究,发现我们可以针对任何类型甚至复杂类型进行检查,而不仅仅是针对字符串的检查,如前所述。解决此问题的关键是匹配整个对象,即匹配该对象的所有属性,而不仅仅是部分匹配,例如,三个属性之一。
您要实现的目标不适用于当前的数据库结构,因为slug
属性存在于嵌套在数组中实际对象内的对象中。一种可能的解决方案可能是复制一些数据,然后仅将所需的值添加到数组中,然后在此新创建的数组上使用array-contains-any
运算符。