【问题标题】:query firebase for documents that contain an array of length > 0查询包含长度> 0数组的文档的firebase
【发布时间】:2019-08-12 17:51:25
【问题描述】:

是否可以在特定字段的数组中元素数大于 0 的集合中查询 firebase 文档

对于我的示例,每个文档都有一个名为“people”的字段,其中包含一个整数数组(或该数组为空)。

我的搜索总是返回 0 个文档,但是当我在 firestore 数据库管理面板中搜索时,我可以看到一些文档。

import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
admin.initializeApp();

var db = admin.firestore();
export const helloWorld = functions.https.onRequest(function(req,res)
{
    var all_users = db.collection('users');
    var query = all_users.where("people.length", ">", 0).get().then(snapshot => 
    {
        let docs = snapshot.docs;

        //return 1st document found

        res.send(docs[0].data());
    });

    query.catch(error =>
    {
        res.status(500).send(error);
    });

});

【问题讨论】:

    标签: javascript google-cloud-firestore


    【解决方案1】:

    这在 Firestore 中是不可能的。您可以查询数组类型字段的唯一内容是数组中某些元素的确切内容。

    过滤任何数组大小的替代方法是使用整数字段来记录数组中元素的数量,并使其与对该数组的更改保持同步。

    【讨论】:

    • 道格·史蒂文森!感谢您的反馈和一个不错的建议解决方案。喜欢你的视频。
    • .where("myArray", "!=", []) 为我工作。自此答案以来是否已添加此功能?
    • 我要补充一点,Firestore Web 控制台只允许我对字符串、数字或布尔值运行 !=,所以我认为 "!=", [] 不起作用,但它确实有效:)
    • 嗨,我刚刚找到了这个答案并尝试了.where('entries', isNotEqualTo: []),这对我来说可以省略“条目”为空的文档。根据您之前的回答,我不确定这是否会产生负面影响? @DougStevenson 你链接到另一个线程,我看不到你指的是什么。谢谢
    【解决方案2】:

    FS 中的索引是稀疏的,因此您可以简单地执行 orderBy,并且只返回在有序属性上填充数据的文档:

    .collection("users").orderBy("people", "asc")
    

    【讨论】:

    • 完美!谢谢!
    • 这将返回所有没有“人”的文档,然后返回“人”。我建议将“desc”排序顺序与 .select('people') 一起使用,然后遍历列表并保存文档 ID,直到 'people' 为空。然后获取使用 ID 设置完整字段的文档。
    【解决方案3】:

    我试图在我的 Firestore Recycler 中按喜欢该物品的人数的数量来订购物品。因为没有这个特定的查询功能我创建了新字段"likesNum"。为了能够使用FieldValue.increment() 使其与对该数组的更改保持同步,字段类型必须是整数。

    但是查询.orderBy() 中的数值字段会使我的应用程序崩溃。 所以我尝试了:

    Query query = placesRef.orderBy( String.valueOf("likesNum"), Query.Direction.DESCENDING).limit(5);
    

    它奏效了。虽然编译器说String.valueOF()没有必要,但我的问题完美解决了。

    也许这可以帮助遇到同样问题的人。

    【讨论】:

      猜你喜欢
      • 2014-07-01
      • 1970-01-01
      • 2021-01-17
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多