The data in the realtime db is structure like below:
"orders" : {
"-LM5p4tl7Og_PMJOspZ-" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-26954",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
},
"-LM5s1wRCvqWA1vsZONy" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-11423",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
},
"-LM5sOHzjLeqFGFleMxq" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-63772",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
}
}
I am using angularfire2 in my ionic app and filtering few orders as below:
getPendingOrders(dateStr:string){
return new Promise((resolve, reject) =>
{
this.db.list('orders',
ref => ref.orderByChild("order/_date").equalTo(dateStr)
).valueChanges().subscribe(
res => {
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}
The above query gives me the response as below
[{"customer": {}, "order": {}}, {"customer": {}, "order": {}}]
I can render it in UI just fine and i want the end user to be able to update the value of property "_orderStatus". The trouble is the way i queried the data i have lost the keys to identify a particular object to update it. Please advise
ok, not sure if this helps,I think you have migrated to use AngularFire 5.0. Calling .valueChanges() will return an Observable without any metadata (item key for example), you need to use .snapshotChanges() call instead:
this.db.list(...)
.snapshotChanges()
.map(changes => {
return changes.map(change => ({key: change.payload.key, ...change.payload.val()}));
})
.subscribe(...)