【问题标题】:Check if a document contains 2 strings检查文档是否包含 2 个字符串
【发布时间】:2020-03-22 14:52:40
【问题描述】:

我在 Android (Kotlin) 上使用 Firestore。如果要检查是否存在包含 2 个用户 ID 的文档,请在我的一个集合中。如果不存在这样的文件,我想写信给我的收藏。否则,我想获取该文档的 ID。这是我的文档的样子:

给定 2 个字符串,我如何检查文档是否同时包含这两个字符串?

【问题讨论】:

  • 到目前为止你尝试过什么?而不是描述您的数据库的外观,请添加它的屏幕截图。

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

要检查特定文档是否包含这两个特定 ID,您需要使用 Query。我假设截图中的文档存在于名为“users”的集合中,请使用以下代码行:

var rootRef = FirebaseFirestore.getInstance()
var usersRef = rootRef.collection("users")
var queryByTWoIds = usersRef.whereEqualTo("p1", "9EBt ... LX62").whereEqualTo("p2", "Tsh6 ... Fin1")
queryByTWoIds!!.get().addOnSuccessListener { documents ->
    for (document in documents) {
        Log.d(TAG, "${document.id} => ${document.data}")
    }
}.addOnFailureListener { exception ->
    Log.w(TAG, "Error getting documents: ", exception)
}

请注意,在 Cloud Firestore 中,允许链接多个 whereEqualTo() 方法调用。

【讨论】:

  • 哦,谢谢!但是如果第一个 whereEqualTo 为真而第二个不是,会发生什么?我正在运行此代码并且查询成功了两次,而我的集合中现在只有 1 个文档,为什么?
  • 数据已经存在:[DocumentSnapshot{key=conversations/5lD92VBw408ncMav8zdB, metadata=SnapshotMetadata{hasPendingWrites=false, isFromCache=false}, doc=Document{key=conversations/5lD92VBw408ncMav8zdB, data=ArraySortedMap{(initialTimestamp =>1584887186159), (messages=>[]), (p1=>9EBtkkA1GedhROaNaSUzyyc2LX62), (p1Name=>Amol Borkar),.....] 2020-03-22 20:53:40.610 15949-15949/com. halalrishtey D/HomeFragment:数据已经存在:[]
  • "如果其中一个 whereEqualTo 为真,但第二个不是",那么您将得不到任何结果。链接两个whereEqualTo() 方法是AND 操作,不是 OR。我不明白“两次成功” 是什么意思。在与屏幕截图完全相同的数据库上使用上述查询,应返回单个文档。
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 2012-01-14
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多