2017-10-20 162 views
0

使用新公司的FireStore,我有一個看起來像這樣的結構:公司的FireStore排序依據(子集合)

{ 
    ... 
    "username": "mr_jones", 
    "date_created": 1508395138572, 
    "stats": { 
     "posts": 143, 
     ... 
    }, 
    ... 
} 

根據該文件,我可以order and limit我的查詢,以篩選基於一個where數據條款。我如何根據stats.posts訂購這些數據?

usersRef.orderBy('stats.posts').limit(15); 
+0

'usersRef.orderBy('stats.post')。limit(15)'看起來對我來說很合適。當你嘗試時會發生什麼?你有錯誤嗎? –

+0

@MichaelLehenbauer我期待它很像一個mongoDb查詢,但任何時候我使用一個屬性時,它似乎對結果集沒有任何影響 – Felipe

回答

2

看起來你在你的代碼一個錯字:根據你以前的結構

usersRef.orderBy('stats.post').limit(15); 

字段名稱應該是stats.posts

usersRef.orderBy('stats.posts').limit(15); 

我雙重檢查了這個作品。在控制檯中,我創建了一個名爲tester的集合,用於存儲4個文檔。每個文檔都有一個stats.posts屬性,設置爲數字1到4.下面的代碼打印出1,2,3。如果我刪除了限制,它會打印出1,2,3,4。如果我還刪除了它打印出2,1,3,4.

db.collection('tester').orderBy('stats.posts').limit(3).get().then(function(querySnapshot) { 
    querySnapshot.forEach(function(documentSnapshot) { 
     console.log(documentSnapshot.data().stats.posts); 
    }); 
}); 
+0

事實上,這是一個錯字,但是它是這個問題的組成結構。我編輯了這個問題。當您似乎在Google雲部門工作的某個屬性訪問者被指定爲 – Felipe

+0

時,'orderBy'表達式似乎對查詢沒有影響。這種語法是否正式支持?我沒有看到像這樣的文檔中的任何例子。 – Felipe

+0

我是,我是Cloud Firestore的產品經理。它是,我只是自己測試它,完美地工作。如果它不適合你,你需要發佈更多關於不工作的信息(例如錯誤/輸出)。 –