【问题标题】:Firestore whereEqualTo objectFirestore whereEqualTo 对象
【发布时间】:2020-10-21 09:53:34
【问题描述】:

我已经搜索了几个小时的文档,但我仍然看不到他们展示这样一个用例的示例。

我有下面的代码,但它什么也没返回。

val obj = mapOf(
    "type" to "Admin"
)

Firebase.firestore
    .collection("Caves")
    .whereEqualTo("author", obj)
    .get()
    .addOnSuccessListener {
        Debug.log("success: %s", it.documents.size) // it.size is also 0 where it should be 3
    }

示例数据结构如下所示:

"Caves"
[
    {
        author: {
            type: "Admin",
            id: 123,
            displayName: "Test"
        },
        ...
    },
    ...
]

在 C# 中,这很简单:caves.Where(e => e.Author.Type == Type.Admin)

有没有办法对对象使用whereEqualTo()

我的数据结构是否错误?


编辑:

Firestore 数据的屏幕截图:

【问题讨论】:

  • 您能分享一下您的 Firestore 结构的屏幕截图吗?我问这个问题是因为我对你上面的表示感到困惑,因为你在这个结构中添加了它:[{{}}],这意味着在Caves 集合中,你想要获取的作者对象是另一个对象内部的对象数组,那不正确是吗?如果可能,请分享屏幕截图,这样更容易理解。
  • @RafaelLemos 是的。我将一个对象放在一个集合中。我做错了吗?它应该仅限于键/值对吗?顺便说一句,我添加了屏幕截图。
  • 我认为它存在于一个数组中。道格的回答是对的;)

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

如果要根据地图字段的嵌套属性过滤文档,可以使用点表示法来指定:

Firebase.firestore
    .collection("Caves")
    .whereEqualTo("author.type", "Admin")
    .get()
    .addOnSuccessListener {
        Debug.log("success: %s", it.documents.size) // it.size is also 0 where it should be 3
    }

注意“author.type”字段。唯一提到点符号的是documentation for updates,但它也适用于查询。

【讨论】:

  • 这很好用,谢谢!我实际上并没有查看与update 相关的查询,welp。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2018-10-22
  • 1970-01-01
相关资源
最近更新 更多