Javascript 从单个Firestore文档返回排序字段
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
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]);
控制台日志(已排序)代码>