【问题标题】:firestore orderby on subproperty (subcollection)子属性(子集合)上的firestore orderby
【发布时间】:2018-04-01 02:59:40
【问题描述】:

使用新的 Firestore,我的结构如下所示:

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

根据文档,我可以order and limit 我的查询,以便根据where 子句过滤数据。如何根据stats.posts 订购这些数据?

即

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

【问题讨论】:

  • usersRef.orderBy('stats.post').limit(15) 在我看来是正确的。当你尝试它时会发生什么?你有错误吗?
  • @MichaelLehenbauer 我期待它很像一个 mongoDb 查询,但任何时候我使用一个属性似乎对结果集没有影响

标签: javascript node.js firebase google-cloud-firestore


【解决方案1】:

您的代码中似乎有错字:

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);
    });
});

【讨论】:

  • 确实是一个错字,但它是这个问题的一个组成结构。我已经编辑了这个问题。指定属性访问器时,orderBy 表达式似乎对查询没有影响
  • 您似乎在谷歌云部门工作。官方支持这种语法吗?我在文档中没有看到任何这样的示例。
  • 我是,我是 Cloud Firestore 的产品经理。是的,我自己测试过,效果很好。如果它不适合你,你需要发布更多关于什么不工作的信息(例如错误/输出)。
  • 感谢 Dan,我有机会浏览代码并发现在 Angular ng-repeat 期间正在修改排序。数据库中的数据已正确排序!
  • 太好了,很高兴你把它整理好了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多