如何提取数据库中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 中的完整代码示例对我有用。