查询Firebase中包含长度大于0的数组的文档

ama*_*man 2 javascript google-cloud-firestore

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

在我的示例中,每个文档都有一个名为“ 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);
    });

});
Run Code Online (Sandbox Code Playgroud)

Dou*_*son 5

Firestore无法做到这一点。您可以查询数组类型字段的唯一内容是数组中某些元素的确切内容。

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

  • `.where("myArray", "!=", [])` 对我有用。自这个答案以来是否添加了此功能? (5认同)
  • @KnewB /sf/ask/3307634361/ (3认同)
  • 我只是补充一点,Firestore Web 控制台只允许我对字符串、数字或布尔值运行 !=,所以我认为 `"!=", []` 不起作用,但它确实有效:) (3认同)

小智 5

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

.collection("users").orderBy("people", "asc")
Run Code Online (Sandbox Code Playgroud)