javascript - 将新数据推送到 firebase 数据库时设置自定义数字键

标签 javascript android node.js firebase firebase-realtime-database

我是 Firebase 新手,我希望在将新数据推送到数据库时拥有自己的 key 。

enter image description here

现在我正在使用以下内容。

uid(FirebaseAuth.getInstance().getCurrentUser().getUid())

但我想创建自己的 id,它必须是一个数值。

如何在那里创建我自己的自定义 key ?如0001、0002等

我在这里问是因为我正在开发一个在线购物项目。当用户将产品添加到库存时,需要为每个产品分配一个 ID。如果不可能,那就告诉我不,我可以接受这个答案。

最佳答案

您只需执行 push() 函数即可。这样做的目的是为您的 Node 创建一个随机 ID。

databaseRef.push(); // You have created a node with a random id.

但是,如果您想创建具有数字 id 的 Node ,您可以使用一个创建数字值的函数:

public static long generateRandom(int length) {
    Random random = new Random();
    char[] digits = new char[length];
    digits[0] = (char) (random.nextInt(9) + '1');
    for (int i = 1; i < length; i++) {
        digits[i] = (char) (random.nextInt(10) + '0');
    }
    return Long.parseLong(new String(digits));
}

该函数来自:12 Digit unique random number generation in Java

您传递一个长度,它会创建一个随机数值。对你来说理想的长度是 5。然后你可以这样做:

long randomFiveDigitValue = generateRandom(5);
databaseRef.child(String.valueOf(randomFiveDigitValue)).setValue(your_object);

另一种选择是使用整数哈希码。它会减少哈希冲突,但您也应该准备好像前面的函数一样处理它们。您可以从订单中获取标识符,例如日期,甚至是多种因素的组合,然后执行以下操作:

//Replace all these variables with the respective value
String factors = "your_date" + "user_uid" + "product_name";
factors.hashCode(); //String date returns a integer hash value.

以下是 50000 随机生成的产品的 hashCode() 冲突:

COLLISIONS BETWEEN: 2 Items
ITEM 1: DATE: 24-5-2019 08:09 PM + NAME: IPHONE + UID: 4J3IF93KSKK0295[L3
ITEM 2: DATE: 24-5-2019 09:08 PM + NAME: MARKER + UID: 534KKJI903[PCO4OP5

生成这些花了很长时间,我认为现在碰撞已经很少见了。就像 1 比 50000 的比率。我的算法可能有缺陷,但这种方式的碰撞仍然非常低。

关于javascript - 将新数据推送到 firebase 数据库时设置自定义数字键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57396702/

相关文章:

javascript - 为不同的浏览器添加类

java - 从 Activity 保存图像时显示进度条

android - 在应用程序 :preDebugBuild (Android Studio) 上构建失败

android - 使用动画更新布局

node.js - 在 mongoDB 中获取具有 id 数组的集合中的对象

javascript - 使用 jQuery AJAX 和 ASP.NET 与数据库通信

javascript - 如何禁用ajax请求的页面

javascript - AJAX 工具包 -- webservice 执行的问题

javascript - 使用命名函数来捕获 promise 中的错误?

javascript - node.js 找不到 'neo4j' 模块 (Thingdom)