使 Firestore 仅返回customer_id小于 1000 的用户



如何提取数据库中customer_id少于 8 位的用户?

我试图这样做:

iter := client.Collection("users").Where("customer_id", "<", "10000").Documents(ctx)

但这不会返回任何内容,即使我知道我的用户看起来像这样:

map[customer_id:111]
map[customer_id:123]

但是,如果我这样做

iter := client.Collection("users").Where("customer_id", "==", "111").Documents(ctx)

.. 它会找到该文件,

编辑:我刚刚注意到customer_id存储为字符串。

不是 firestore 用户,但我从 https://cloud.google.com/firestore/docs/query-data/queries 中找到了一些信息。

countryQuery := cities.Where("state", "==", "CA")
popQuery := cities.Where("population", "<", 1000000)
cityQuery := cities.Where("name", ">=", "San Francisco")

所以我认为你应该尝试:

iter := client.Collection("users").Where("customer_id", "<", 10000).Documents(ctx)

发生这种情况的原因是您将归档设置为"字符串"而不是"数字"。我已经复制了用例场景,这些是我的发现:

我的 Firestore 数据库:

collection: users
>> document: "auto_id"
--customer_id: 111
>> document: "auto_id"
--customer_id: 123
>> document: "auto_id"
--customer_id: 4500
>> document: "auto_id"
--customer_id: 3500

我在 Firestore 中将每个customer_id设置为字符串。然后,当使用方法时,Where("customer_id", "==", "111")会给我map[customer_id:111]但是当使用Where("customer_id", "<", "1000")Where("customer_id", "<", 1000)时,不会像你描述的那样给我任何东西。

然后我去了 Firestore 并将每个文件的类型从string更改为number并再次执行代码,所以我得到:

map[customer_id:111]
map[customer_id:123]

我在 GitHub 中的完整代码示例对我有用。

最新更新