簡體   English   中英

為包含長度大於 0 的數組的文檔查詢 firebase

[英]query firebase for documents that contain an array of length > 0

是否可以在特定字段的數組中的元素數大於 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);
    });

});

Firestore 無法做到這一點。 您可以查詢數組類型字段的唯一內容是數組中某些元素的確切內容。

過濾任何數組大小的替代方法是使用整數字段來記錄數組中元素的數量,並使其與對該數組的更改保持同步。

索引在 FS 中是稀疏的,因此您可以簡單地執行 orderBy 並僅返回具有已排序屬性上填充數據的文檔:

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

編輯

不工作了。


舊答案

只有當您知道數組內部的內容(不是多少,只是對象的屬性或原始類型)時,才有可能通過某種想象力實現

假設每個人對象將是 {name:'...',age:'..'} 一個簡單的查詢是:

firestore.collection('people').where('people.0.name','>','')

在基元的情況下

firestore.collection('people').where('people.0','>','')

通過這種方式,您將搜索第一個項目名稱屬性不為空的數組。 如果數組沒有第一個屬性,則它為空。

重要提示:就像我說的,只有當你知道那里會有什么樣的對象時才有效

我試圖在我的 Firestore Recycler 中按喜歡該物品的人的數組大小訂購物品。 因為沒有這樣的特定查詢函數,所以我創建了新字段"likesNum" 為了能夠使用FieldValue.increment()使其與對該數組的更改保持同步,字段類型必須是整數。

但是查詢.orderBy()數值字段使我的應用程序崩潰。 所以我試過:

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

它奏效了。 雖然編譯器說String.valueOF()不是必需的,但我的問題完美解決。

也許這可以幫助有同樣問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM