Javascript 在firebase中存储对象的正确方法是什么,以便以后以一种简单的方式对其重新排序?

Javascript 在firebase中存储对象的正确方法是什么,以便以后以一种简单的方式对其重新排序?,javascript,angular,firebase,firebase-realtime-database,angularfire2,Javascript,Angular,Firebase,Firebase Realtime Database,Angularfire2,我有一张这样的清单 {"ids": [ { "id1": { "name": "name1", "lastname": "lastname1" } }, { "id2": { "name": "name2", "lastname": "lastname2" } }, {

我有一张这样的清单

    {"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');
      }
    }
假设我想对一些对象重新排序/移动,结果如下:

name3
name1
name2
name4
为了轻松实现这一点,构建对象的好方法是什么? 我可以添加“order”属性,更新它并按“order”属性对查询进行排序

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

或者我可以添加上一个id键作为属性,但是考虑到“上一个”属性,如何显示列表呢?我想知道如何实现这一点以避免将来的可伸缩性问题。

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

其次,您不应该将此数据保存为数组,因为firebase仍将其存储为对象。相反,您应该保存为对象

查看以下链接了解更多信息

因此,您的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
property进行查询。

谢谢,这是我一直在考虑的解决方案,但当我删除一个“id”时,会强制我更新下一个“id”。我不确定当涉及到巨大的对象时,这是否是一种适当的更新方式。我正在考虑存储对以前“id”的引用,但不知道如何按预期顺序检索结果。删除时不必更新任何内容。您的订单仍将保留。例如,删除顺序为3的对象。您将拥有顺序为1、2、4的对象,并且您的顺序将起作用。为什么要在删除时更新任何内容?是的,没错。但我可能想创建另一个对象并将其放在第一个位置,这样自然的想法是更新所有对象的顺序。或者说你是对的。如果你不想有否定的顺序,你想在中间的某个地方找到新的对象,你应该更新其他的对象。但我认为这里不会有大数据,因为在大数据中,自定义排序并没有那么有用。我也有同样的情况。我允许用户对列表进行重新排序,并更新其他对象。您可以使用1000、2000、3000对它们进行排序,而不是使用1、2、3对它们进行排序。当你想在第一个位置插入对象时,你只需按999、998、997等顺序插入。插入1000次后,你仍然需要更新,但这是一个巨大的改进。您甚至可以增加范围并订购10000、20000、30000的初始项目。您偶尔会更新一次,但这甚至可以在服务器端完成。
"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
    }
}