经过一番研究,似乎我不能使用FireStore来查询某个给定数组不包含的项。有没有人能提供针对这种情况的解决方法?
当用户注册后,应用程序会获取一堆卡片,每张卡片都对应着 FireStore 中的一个 "card" 文档。当用户与卡片交互后,卡片文档会将用户的用户 ID 添加到一个字段数组中(例如:usersWhoHaveSeenThisCard: [userUID]),而 "user" 文档会将卡片的用户 ID 添加到一个字段数组中(例如:cardsThisUserHasSeen: [cardUID])。"user" 文档位于 "user" 集合中,而 "card" 文档则位于 "card" 集合中。
目前,我想获取所有用户未与之交互的卡片。然而,这是有问题的,因为我只知道用户已经与哪些卡片交互过,所以 .whereField(usersWhoHaveSeenThisCard, arrayContains: currentUserUID) 就无法使用了,因为我需要一个"arrayDoesNotContain"语句,但它不存在。
最后,用户无法拥有一张卡片,因此我无法在卡片文档中创建真/假布尔字段(例如:userHasSeenThisCard: false)并按照这个标准进行搜索。
我能想到的唯一解决方案就是在卡片文档上创建一个新的字段数组,其中包含未看过卡片的每个用户(例如:usersWhoHaveNotSeenThisCard: [userUID]),但这意味着每个注册用户都必须将其用户 ID 写入 1000 多个卡片文档中,这将消耗我的数据。
我可能只是运气不好,但希望更熟悉 NOSQL / FireStore 的人能提供一些见解。
当用户注册后,应用程序会获取一堆卡片,每张卡片都对应着 FireStore 中的一个 "card" 文档。当用户与卡片交互后,卡片文档会将用户的用户 ID 添加到一个字段数组中(例如:usersWhoHaveSeenThisCard: [userUID]),而 "user" 文档会将卡片的用户 ID 添加到一个字段数组中(例如:cardsThisUserHasSeen: [cardUID])。"user" 文档位于 "user" 集合中,而 "card" 文档则位于 "card" 集合中。
目前,我想获取所有用户未与之交互的卡片。然而,这是有问题的,因为我只知道用户已经与哪些卡片交互过,所以 .whereField(usersWhoHaveSeenThisCard, arrayContains: currentUserUID) 就无法使用了,因为我需要一个"arrayDoesNotContain"语句,但它不存在。
最后,用户无法拥有一张卡片,因此我无法在卡片文档中创建真/假布尔字段(例如:userHasSeenThisCard: false)并按照这个标准进行搜索。
我能想到的唯一解决方案就是在卡片文档上创建一个新的字段数组,其中包含未看过卡片的每个用户(例如:usersWhoHaveNotSeenThisCard: [userUID]),但这意味着每个注册用户都必须将其用户 ID 写入 1000 多个卡片文档中,这将消耗我的数据。
我可能只是运气不好,但希望更熟悉 NOSQL / FireStore 的人能提供一些见解。
// If any code sample would help, please let me know and I'll update - I think this is largely conceptual as of now