将对象存储在 firebase 中以便稍后以简单的方式重新排序的正确方法是什么?

What would be the proper way to store objects in firebase to reorder them later in an easy way?

我有一个这样的列表

    {"ids": [
      {
        "id1": {
          "name": "name1",
          "lastname": "lastname1"
        }
      },
      {
        "id2": {
          "name": "name2",
          "lastname": "lastname2"
          }
      },
      {
        "id3": {
          "name": "name3",
          "lastname": "lastname3"
        }
      },
      {
        "id4": {
          "name": "name4",
          "lastname": "lastname4"
        }
      }
      ]
    }

然后我检索并显示它:

    import {Component} from '@angular/core';
    import {AngularFire, FirebaseListObservable} from 'angularfire2';

    @Component({
      selector: 'app',
      templateUrl: `
      <ul>
        <li *ngFor="let id of ids | async">
        {{ id.name }}
        </li>
      </ul>
      `,
    })
    class AppComponent {
    ids: FirebaseListObservable<any>;
      constructor(af: AngularFire) {
        this.ids = af.database.list('/ids');
      }
    }

结果:

name1
name2
name3
name4

假设我想要 reorder/move 一些对象,所以我得到这样的结果:

name3
name1
name2
name4

构造我的对象以轻松实现此目的的好方法是什么? 我可以添加 "order" 属性,更新它并按 "order" 属性 排序查询。

    this.ids = af.database.list('/ids',{
          query: {
    orderByChild: 'order'
    }
    });

或者我可以将之前的 id 键添加为 属性,但是如何显示列表,同时考虑 "previous" 属性?我弄清楚如何实现这一点以避免未来的可扩展性问题。

首先,您必须添加 属性 来存储订单。

其次,您不应该将此数据保存为数组,因为 firebase 无论如何都将其存储为对象。相反,您应该另存为对象。

查看以下内容link了解更多信息。

https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

所以,您的 firebase 数据库应该是这样的。

"ids": {
    "id1": {
        "name": "name1",
        "lastname": "lastname1",
        "order": 1
    },
    "id2": {
        "name": "name2",
        "lastname": "lastname2",
        "order": 2
    },
    "id3": {
        "name": "name3",
        "lastname": "lastname3",
        "order": 3
    },
    "id4": {
        "name": "name4",
        "lastname": "lastname4",
        "order": 4
    }
}

你应该通过 order 属性.

查询