swift – Firebase Firestore – 或查询替代方案
在这个问题
Firebase Firestore – OR query中他们说没有OR查询.这意味着我无法轻易查询具有我之前获得的数组中ID的项目.
// What I want documentRef .whereField("itemId",isEqualTo: "id1") .orWhereField("itemId",isEqualTo: "id3") // or documentRef .whereField("itemId",in: idArray) 由于这不起作用,查询我的数据有哪些选择? >获取所有数据并在本地检查 我可以获取所有记录,只检查设备上的ID,但问题是它最多可以有1000条记录,而用户可能只需要其中的三条记录. >对所有项目进行单独查询 我可以为用户需要的每个项目执行查询whereField(“itemId”,isEqualTo:“id”).如果用户只需要一些项目,但用户可能需要所有项目,并且此解决方案将比第一个项目慢很多,那么这将是很好的. (除非你可以批量阅读) >移动数据 我想我可以将购买的数据移动到Item集合:Items / itemid / PurchasedBy / uid但我想检索用户已购买的Item,我不知道如何通过嵌套集合中的字段查询Item .我也不知道这是否是数据的正确位置. 我的数据: Users/uid/PurchasedItems/itemid payedInMoney: "$0.00" payedInCoins: "100" itemId: "itemid" timeStamp: timestamp Items/itemid itemId: "itemid" // Other item info 编辑: 我做了第一个选项,因为这是我在RTDB上做的,但即使持久化并使用addSnapshotListener,Firestore甚至没有接近RTDB实现的速度.我按时间计时,看起来Firestore的速度至少是RTDB的4倍(两者都启用了持久性). // iPad 5 (2017) - iOS 11 RTDB: 50-100ms FST: 350-450ms // iPad Air (2014) - iOS 10 RTDB: 100-150ms FST: 700-850ms // iPad Mini (2012) - iOS 9 RTDB: 150-200ms FST: 2900-3200ms 编辑2: 决定坚持使用RTDB,直到Firestore上的持久性真正起作用. 编辑3: 接受的答案修复了这个问题中的问题,即使它没有解决所有我的问题,也可能有助于其他人. 在使用Firestore仅使用一个查询进行测试后,结果仍然比在RTDB中执行嵌套查询需要更长的时间,因此我现在将坚持我的决定. 解决方法
这似乎是复制一些项目数据的好例子.我假设某些项目属性(如“name”)是不可变的,因此可以存储在PurchasedItems子集中,而不必担心将来的更新.
因此,如果您将一些数据添加到PurchasedItems: Users/uid/PurchasedItems/itemid // Existing payedInMoney: "$0.00" payedInCoins: "100" itemId: "itemid" timeStamp: timestamp // Add these name: "Item Name" url: "http://foo.bar/123" 然后,您将有足够的信息在单个查询中显示用户购买项目的列表,而无需按ID查找每个项目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |