我可以基于不在数组中的值查询吗?

时间:2019-06-08 18:45:26

标签: firebase google-cloud-firestore

我的用户有一个字符串字段,我们称之为“ goodsId”,他们也有一个字符串数组字段,我们称之为“ viewedGoods”。我希望做的是编写一个查询,该查询将获取下一个未查看的商品,这意味着我们的用户将查看其他用户的商品,并且该查询将检查他们的goodsId是否已在我们用户的viewedGoods数组中。如果goodsId不在我们用户的viewedGoods中,则返回。

Ex1:

Our User {
-goodsId: "3wdj9"
-viewedGoods: ["djen9", "2wk01"]
}

Queried User 1 {
-goodsId: "edij2"
-viewedGoods: ["2l1k4"]
}

Ex2:

Our User {
-goodsId: "3wdj9"
-viewedGoods: ["djen9", "2wk01"]
}

Queried User 1 {
-goodsId: "djen9"
-viewedGoods: ["2l1k4"]
}

Queried User 2 {
-goodsId: "sds33"
-viewedGoods: ["2l1k4"]
}

Ex1:我们的用户接下来将查看查询的用户1的商品

Ex2:我们的用户已经查看了查询用户1的商品,因此它查看了下一个未查看的商品(查询用户2)

1 个答案:

答案 0 :(得分:1)

否,使用您当前的数据库结构进行单个查询是不可能的。 Firestore为字段建立索引的方式,您只能查询数组中是否存在项目,而不能查询是否存在项目。如果要在列表或地图中找到某个值,则该值必须存在。

您在这里要做的是存储已查看和未查看项目的列表,然后查询对您要执行的操作有意义的列表。显然,对于大型列表,这将无法扩展,您将不得不寻找另一种解决方案。