如果我在名为array_field
的集合的每个文档中都有一个字段,其中包含类型为object
的个元素,我可以查询在对象中的特定字段?
- collection
- document1
- array_field
0: { type: tree, age: 143 }
1: { type: sunflower, age: 1 }
2: { type: fungus, age: 3 }
- document2
- array_field
0: { type: plane, age: 38 }
1: { type: plant, age: 2 }
2: { type: fungus, age: 1 }
是否可以查询每个在其 array_field
中具有类型fungus
的对象的文档?
如果不可能,是否可以通过指定精确的object
来查询文档?
我不知道如何编写查询:.where('array_field', 'array_contains', /*how do I define this object*/)
。只是这样的JSON对象:{type: fungus, age: 2}
?
我要实现的查询如下:
where('array_field', 'array_contains', 'type:fungus')
哪个会返回document1
和document2
,但在这种情况下我找不到有关语法的任何提示。
答案 0 :(得分:2)
使用当前数据结构是不可能的。 array_contains仅在匹配数组元素的 entire 内容时才起作用,而不仅仅是特定的对象字段。
相反,您可以重组数据以使用具有唯一类型和布尔值的对象,以便查询诸如types.fungus == true
之类的东西:
document
types {
fungus: true
plant: true
}
通常在nosql数据库中复制数据以适合您需要执行的特定查询。