2017-10-20 152 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的产品经理。它是,我只是自己测试它,完美地工作。如果它不适合你,你需要发布更多关于不工作的信息(例如错误/输出)。 –