通常,所有子项和所有值都按字母顺序排列在Firebase服务器上。 是否有可能让新的孩子始终位于Firebase列表的底部? 我想通过创建日期归档它们。旧的应始终保持最佳状态,新上传的子项应始终添加到底部。 日期本身并不重要,但新孩子总是必须挂在底部。这可能吗?
http://back:3000
因此,当我现在上传“Party4名称”并且其名称在Party1和Party3之间有一个字母时,它们介于它们之间。但我希望所有新生儿总是处于最底层。
答案 0 :(得分:1)
我建议你只使用一个结构来实现排序操作 <{1}}来自
String uniqueKey = ref.push()。getKey()
Unique key
答案 1 :(得分:1)
我推荐这样的结构。
在我的示例中,它包含值time
,guestCount
和yourdatabase/events
。
使用android firebase-sdk ,你可以推动databaseReference.push().getKey();
路线,
与yourdatabase/events/key
- &gt;这将为您的事件对象创建一个新的键。
使用此密钥,您已从上面的步骤2生成并推送新创建的密钥
databaseReference.push()
下面的对象。您可以将databaseReference.updateChildren(<hashmap>);
用于单个值
或者,如我所知,使用{
"events": {
"abc" : {
"name" : "party 1",
"time" : "-0034534535345",
"guestCount" : 64
},
"abd" : {
"name" : "party 2",
"time" : "-0034534535345",
"guestCount" : 128
},
"abe" : {
"name" : "party 3",
"time" : "-456456456456",
"guestCount" : 16
}
}
}
将所有值以原子方式上传到数据库中。
这将导致数据库结构看起来像这样:
DataTable dt = new DataTable();
dt.Columns.Add("DateTM", typeof(DateTime));
dt.Columns.Add("Id", typeof(string));
dt.Columns.Add("Vtm", typeof(double));
OpenExcelWorkbook(path + fileName, true);
XlWorksheet = (Excel.Worksheet)XlWorkbook.Worksheets["Sheet1"];
Rng = XlWorksheet.UsedRange;
object[,] valueArray = (object[,])Rng.get_Value(Excel.XlRangeValueDataType.xlRangeValueDefault);
XlWorkbook.Close(false);
// dates start in cell D4
DateTime[] dates = new DateTime[valueArray.GetLength(1) - 3];
for (int t = 4; t <= valueArray.GetLength(1); t++)
dates[t - 4] = Convert.ToDateTime(valueArray[4, t]);
// values start from row 5
for (int n = 5; n <= valueArray.GetLength(0); n++)
{
string id = valueArray[n, 1].ToString().Trim();
// dates start from column D
for (int m = 4; m <= valueArray.GetLength(1); m++)
{
double vt = Convert.ToDouble(valueArray[n, m]);
if (vt == -2146826246) // for any #N/A values
vt = -999;
dt.Rows.Add(dates[m - 4], id, vt);
}
}
using (SqlBulkCopy sqlBulk = new SqlBulkCopy(UtilityLibrary.Database.Connections.Myconnection))
{
sqlBulk.BulkCopyTimeout = 0;
sqlBulk.DestinationTableName = "tblMyTbl";
sqlBulk.WriteToServer(dt);
}
现在对步骤2和3中的新键进行排序,并且新事件将始终位于列表的底部。通过时间戳,还可以使用firebase-database查询并按子值排序。
push()生成的唯一键基于时间戳,因此列表项会按时间顺序自动排序。
检查stackoverflow和google,为什么我颠倒了时间戳。 Firebase按字典顺序按升序查询所有新对象。
干杯。