Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从单个Firestore文档返回排序字段_Javascript_Google Cloud Firestore - Fatal编程技术网

Javascript 从单个Firestore文档返回排序字段

Javascript 从单个Firestore文档返回排序字段,javascript,google-cloud-firestore,Javascript,Google Cloud Firestore,Firestore允许您在查询集合时对文档进行排序(例如,citiesRef.orderBy(“名称”)): 但是,是否有方法对文档的字段进行排序 例如,我在Firestore中有以下数据模型: exampleCollection: { documentId: { field1: {sortOnMe: 1, foo: bar}, field2: {sortOnMe: 2, foo: bar}, field3: {sortOnMe: 3, f

Firestore允许您在查询集合时对文档进行排序(例如,
citiesRef.orderBy(“名称”)
):

但是,是否有方法对文档的字段进行排序

例如,我在Firestore中有以下数据模型:

exampleCollection: {
    documentId: {
        field1: {sortOnMe: 1, foo: bar},
        field2: {sortOnMe: 2, foo: bar},
        field3: {sortOnMe: 3, foo: bar}
    }
}
我目前正在返回给定文档中的所有字段,如下所示:

exampleCollection.doc(documentId)
                 .valueChanges()
                 .subscribe((response) => { 
                     // response = {
                     //     field2: {sortOnMe: 2, foo: bar},
                     //     field3: {sortOnMe: 3, foo: bar},
                     //     field1: {sortOnMe: 1, foo: bar}
                     // }
                  });
这很好地工作,并对变化作出响应。但是,
exampleData
的顺序是不可预测的,并且在添加新字段时会发生变化。是否有一种方法可以根据上面查询返回的字段中的一些嵌套字段(例如
sortOnMe
)对这些字段进行排序


如果不是,那么在每个文档中增加一层集合以进行排序是否更好?来自Firebase,我不太愿意嵌套太深,但这在Firestore中可能不是一个大问题。

orderBy
对文档进行排序,而不是对文档中的字段进行排序。在您的示例中,您已经获取了一个文档。您有两个选择:

  • 获取文档并对客户机中的字段进行排序
  • 创建子集合并获取子集合中的所有文档,按字段中的值排序

  • 文档中的数据是JSON。无法控制JSON对象中字段的顺序。您必须在JavaScript代码中对其进行排序

    例如

    var json={
    字段2:{sortOnMe:2,foo'bar'},
    字段3:{sortOnMe:3,foo'bar'},
    字段1:{sortOnMe:1,foo:'bar'}
    };
    var keys=Object.keys(json);
    key.sort((a,b)=>json[a].sortOnMe-json[b].sortOnMe);
    var sorted=keys.map(key=>json[key]);
    控制台日志(已排序)