Firebase数据库子项排序

时间:2017-12-14 11:58:16

标签: android json firebase firebase-realtime-database

通常,所有子项和所有值都按字母顺序排列在Firebase服务器上。 是否有可能让新的孩子始终位于Firebase列表的底部? 我想通过创建日期归档它们。旧的应始终保持最佳状态,新上传的子项应始终添加到底部。 日期本身并不重要,但新孩子总是必须挂在底部。这可能吗?

http://back:3000

因此,当我现在上传“Party4名称”并且其名称在Party1和Party3之间有一个字母时,它们介于它们之间。但我希望所有新生儿总是处于最底层。

2 个答案:

答案 0 :(得分:1)

我建议你只使用一个结构来实现排序操作 <{1}}来自

  

String uniqueKey = ref.push()。getKey()

Unique key

答案 1 :(得分:1)

我推荐这样的结构。

1。你必须考虑某种类型的Event对象。

在我的示例中,它包含值timeguestCountyourdatabase/events

2。每次有新事件时,都可以使用数据库引用

使用android firebase-sdk ,你可以推动databaseReference.push().getKey();路线, 与yourdatabase/events/key - &gt;这将为您的事件对象创建一个新的

3。将新事件对象上载到数据库

使用此密钥,您已从上面的步骤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按字典顺序按升序查询所有新对象。

干杯。