база данных firebase удалить специфику c данные не все данные - PullRequest
0 голосов
/ 26 февраля 2020

Я хотел бы удалить любые данные в указанное c время. В настоящее время на стороне клиента я пропускаю все данные, проблема в том, что они не привязываются к указанному полю, в моем случае это «конечное время». Вместо этого он удаляет все данные. Данные имеют поле «конечное время», которое является метрикой c, которую я хочу использовать для удаления. Мои данные:

{
  "Locations" : {
    "-M1-hX8f46ppZmTMNQIk" : {
      "endtime" : "Wed Feb 26 2020 14:33:54 GMT+0400 (Gulf Standard Time)",
      "starttme" : "Wed Feb 26 2020 12:32:48 GMT+0400 (Gulf Standard Time)",
      "waringtype" : "تنبيه جوي",
      "weatype" : "رياح"
    },
    "-M1-htZHGAWxYOwzeKPk" : {

      "endtime" : "Wed Feb 26 2020 13:33:54 GMT+0400 (Gulf Standard Time)",
      "starttme" : "Wed Feb 26 2020 12:32:48 GMT+0400 (Gulf Standard Time)",
      "time" : "12:58:01 GMT+0400 (Gulf Standard Time)",
      "waringtype" : "تنبيه جوي",
      "weatype" : "رياح"
    }
  }
}

Код:

   this.items.subscribe((a:any)=>{
  a.forEach(singlemarker => {

    console.log(singlemarker)

    let ref = this.db.list('/Locations', ref => ref.orderByChild("endtime").equalTo(singlemarker.endtime))
    .snapshotChanges().subscribe(queriedItems => {
      queriedItems.forEach((ele) => {

        let keys = ele.payload.key;

        console.log(keys);

        this.db.list('/Locations/'+keys).remove()
        console.log()

      });
      });

Как удалить все данные по их заданному c времени окончания. Не удалить все данные?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Проблема в том, что в вашем коде вы удаляете весь документ. Когда вы запускаете запрос, ссылка является документом root, для которого вы выполняете запрос. Вам необходимо удалить заданный c do c, определенный ключом документа.

соответствующим образом изменить код в соответствии с этим примером:

firebase.database().ref(snapshot.ref+snapshot.key).remove()
0 голосов
/ 26 февраля 2020

Если вы хотите удалить данные в определенное время c, вам нужно использовать equalTo() вместо endAt(), и поскольку вы используете angularFire :

let ref = this.db.list('/Locations', ref => ref.orderByChild('endtime').equalTo(singlemarker.endtime)).snapshotChanges();

Этот запрос должен вернуть узел, содержащий endTime, равный singlemarker.endtime. Выше будет возвращаться наблюдаемое, тогда вы можете подписаться:

ref.subscribe(queriedItems => {
    console.log(queriedItems);
    queriedItems.forEach((ele) => {
      console.log(ele.payload.key);
      let keys = ele.payload.key;
      this.db.object('/Locations/'+keys).remove();
    });
});

Использовать snapshotChanges(), который вернет payload, который содержит key, а затем вы можете использовать object() для ссылки на key и remove() для удаления данных.


Таким образом, если singlemarker.endtime равно Wed Feb 26 2020 14:33:54 GMT+0400 (Gulf Standard Time), то приведенный выше запрос вернет:

   "-M1-hX8f46ppZmTMNQIk" : {
      "endtime" : "Wed Feb 26 2020 14:33:54 GMT+0400 (Gulf Standard Time)",
      "starttme" : "Wed Feb 26 2020 12:32:48 GMT+0400 (Gulf Standard Time)",
      "waringtype" : "تنبيه جوي",
      "weatype" : "رياح"
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...