Android Firebase负ServerValue.TIMESTAMP用于订购

Android Firebase负ServerValue.TIMESTAMP用于订购,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我在Firebase中使用ServerValue.TIMESTAMP在查询中进行排序。我在模型类中将timestamp设置为dats,例如1494325636954 公众出席(字符串usico){ this.usico=usico; HashMap datsObj=新HashMap(); datsObj.put(“日期”,ServerValue.TIMESTAMP); this.dats=datsObj; } 如何将datt设置为负值ServerValue.TIMESTAMP,例如-1494

我在Firebase中使用ServerValue.TIMESTAMP在查询中进行排序。我在模型类中将timestamp设置为dats,例如1494325636954

公众出席(字符串usico){
this.usico=usico;
HashMap datsObj=新HashMap();
datsObj.put(“日期”,ServerValue.TIMESTAMP);
this.dats=datsObj;
}

如何将datt设置为负值ServerValue.TIMESTAMP,例如-1494325636954?

您可以创建Firebase函数,将值更新为负值,同时保持服务器准确的时间戳

exports.makeNegativeTimestamp = functions.database.ref('/posts/{postID}/date').onWrite(event => {
    // get the timestamp from the DeltaSnapshot
    const timestamp = event.data.val();
    // ensure that the timestamp is a number
    if (isNaN(timestamp)) { return; }
    // only make negative if it's currently positive
    if (timestamp >= 0) {
        // returns a promise
        return event.data.adminRef.set(timestamp * -1);
    }
});

在其他情况下使用时间戳,但对于firebase,您不需要将时间戳全部转换为负数来进行排序,我的方法是在添加child时(在child的属性内)将long或int递减,然后将其用作排序方法,如果您只关心订单,这将简化很多时间。

警告:写入同一位置将触发函数两次。(第一次写入正值,第二次写入负值,但它不会第二次写入,但这是对函数触发器的浪费)。更好的选择:为负时间戳使用单独的位置。@RamizAnsari是的,这可能是一种更好的技术(取决于您想要的配置),因为它允许您保留要查询的正时间戳和负时间戳。
exports.makeNegativeTimestamp = functions.database.ref('/posts/{postID}/date').onWrite(event => {
    // get the timestamp from the DeltaSnapshot
    const timestamp = event.data.val();
    // ensure that the timestamp is a number
    if (isNaN(timestamp)) { return; }
    // only make negative if it's currently positive
    if (timestamp >= 0) {
        // returns a promise
        return event.data.adminRef.set(timestamp * -1);
    }
});