Typescript Firestore在对象数组字段中查找具有特定对象的文档

Typescript Firestore在对象数组字段中查找具有特定对象的文档,typescript,firebase,google-cloud-firestore,Typescript,Firebase,Google Cloud Firestore,我试图查询firestore数据库,以查找集合中包含数组字段中某个对象的所有文档。假设我的数据库有这样一个文章集合: 文章: [ { id:“1”, 标题:“第一篇文章”, 评论:[] 相关文章:[ { id:“2”, 标题:“第二条” }, { id:“3”, 标题:“第三条” }, ] }, { id:“2”, 标题:“第二条”, 评论:[] 相关文章:[ { id:“1”, 标题:“第一篇文章” } ] } { id:“3”, 标题:“第三条”, 评论:[] 相关文章:[ { id:“1

我试图查询firestore数据库,以查找集合中包含数组字段中某个对象的所有文档。假设我的数据库有这样一个文章集合:

文章:
[
{
id:“1”,
标题:“第一篇文章”,
评论:[]
相关文章:[
{
id:“2”,
标题:“第二条”
},
{
id:“3”,
标题:“第三条”
},
]
},
{
id:“2”,
标题:“第二条”,
评论:[]
相关文章:[
{
id:“1”,
标题:“第一篇文章”
}
]
}
{
id:“3”,
标题:“第三条”,
评论:[]
相关文章:[
{
id:“1”,
标题:“第一篇文章”
}
]
}

]
执行数组包含搜索时,只能匹配数组中对象的整个元素。您无法像现在尝试的那样,在数组中拾取对象的更深区域


如果您想满足此查询,您需要在文档中找到其他可搜索的字段。可能只有一组相关文档ID对您有效。在NoSQL数据库中复制这样的数据以满足查询是很常见的。

您尝试过您建议的查询吗??因为,如果我没有弄错的话,这正是你应该做的!你确定
articles
是Firestore集合而不是数组吗?@RenaudTarnec是的,articles绝对是db集合。是否有任何与拟议方法相关的注意事项?比如说,在查询或db记录中,属性的顺序是否重要(标题之前的id与标题之前的id)?“属性的顺序重要吗”->我不知道,我从未尝试过。如果您反转对象元素/属性,它会起作用吗?因此,正如其他一些评论员所建议的,匹配数组中的整个对象将不起作用?如下所示:
firestore().collection(“articles”)。其中(“relatedArticles”,“array contains”,{title:“First Article”,id:“1”})
可以匹配整个对象。必须提供结构与数组中的对象相同的对象。但看起来您的数组项相当大,需要提前了解很多信息。您不能在顶级字段数组(例如
relatedArticles
)中挑出嵌入式数组。只能在顶级字段数组上搜索。结构相同是指相同的属性以及属性的顺序/顺序?或者属性的顺序无关紧要?顺序不重要,因为JSON字段必须是唯一的;普通哈希表没有键顺序。然后您可以搜索相关文章中的确切内容。您必须同时提供id和标题才能进行此操作。