我目前正在使用Firebase制作应用。
这是可以在网络上任何地方看到的公告牌之一。
但是有一个问题。
这是日期排序的问题。
我想先看一下最近的日期,但我总是只看到我先创建的数据。
postRef.orderByChild('createData').startAt(reverseDate).limitToFirst(1).on('child_added',(data)=>{
console.log(data.val().name + data.val().createData);
})
结果 - > hello1496941142093
我的代码与上面相同。
如何先查看我最近的帖子?
如何订购firebase数据库的反转?
答案 0 :(得分:16)
Firebase数据库将始终按升序返回结果。没有办法扭转它们。
有两种常见的解决方法:
这些选项之前已被覆盖过很多次。因此,我不会重复,而是列出以前的答案:
答案 1 :(得分:2)
您可以简单地创建一个函数来反转对象,然后遍历它。
function reverseObject(object) {
var newObject = {};
var keys = [];
for (var key in object) {
keys.push(key);
}
for (var i = keys.length - 1; i >= 0; i--) {
var value = object[keys[i]];
newObject[keys[i]]= value;
}
return newObject;
}
答案 2 :(得分:0)
这是我解决它的方式: 首先,我在我的服务中进行了一个查询,我按毫秒过滤日期:
getImages (): Observable<Image[]> {
this.imageCollection = this.asf.collection<Image>('/images', ref => ref.orderBy('time').startAt(1528445969388).endAt(9999999999999));
this.images = this.imageCollection.snapshotChanges().pipe(
map(actions => actions.map(a => {
const data = a.payload.doc.data() as Image;
const id = a.payload.doc.id;
return { id, ...data };
}))
);
return this.images;
}
然后,为了获得最新的日期,我将其添加到我的组件中,我从我的服务中调用该方法:
let date = new Date;
let time = 9999999999999 - date.getTime();
console.log(time);
我把时间作为日期传递。由于较新的日期将是从9999999999999中扣除的较大数字,因此我的服务中的最新日期将首先出现在我的查询中。
希望这能为你解决这个问题
答案 3 :(得分:0)
我已经结束更改在前端部分上创建列表的方式。
是
posts.add(post);
更改为
posts.insert(0, post);
答案 4 :(得分:0)
您可以使用一种方法,将相同或替代的子项保存为负值,然后对其进行解析。
postRef.orderByChild('createData').orderByChild('createData').on('child_added',(data)=>{
console.log(data.val().name + data.val().createData);})
答案 5 :(得分:0)
如果要在前端显示它,建议您在检索数据后,使用JavaScript的reverse()
函数。
示例:
let result = postRef
.orderByChild("createData")
.startAt(reverseDate)
.limitToFirst(1)
.on("child_added", data => {
console.log(data.val().name + data.val().createData);
});
result.reverse();
答案 6 :(得分:0)
使用Swift的reversed()
更容易了:
https://developer.apple.com/documentation/swift/array/1690025-reversed
https://developer.apple.com/documentation/swift/reversedcollection
let decodedIds = try DTDecoder().decode([String].self, from: value)
// we reverse it, because we want most recent orders at the top
let reversedDecodedIds = decodedIds.reversed().map {$0}