好吧,我是 Firebase 的新手,我希望在将新数据推送到数据库时拥有自己的密钥。
问题:
FireBase.push().setValue(mapped_values);
这给出了如下结构:

如何在那里创建自己的自定义密钥?比如用户名什么的。
好吧,我是 Firebase 的新手,我希望在将新数据推送到数据库时拥有自己的密钥。
问题:
FireBase.push().setValue(mapped_values);
这给出了如下结构:

如何在那里创建自己的自定义密钥?比如用户名什么的。
呼叫push()将为您生成一个密钥。
如果改为使用child(),则可以自己确定它们的键/路径。
ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");
String key="1234567sdfsf8";
//custom object
User user=new User();
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("Users").child(key).setValue(user);
作为对最佳答案的更新,Firebase API 已更改并且setValue()不再工作。现在您必须改用该set()函数:
ref.child("Victor").set("setting custom key when pushing new data to firebase database");
您可以使用setValue()创建自定义密钥,即使根目录包含许多子项,例如,如果“用户”是根目录并且您想添加用户以电子邮件作为密钥,它将是这样的
firebase.child("firebase url").child("Users").child("user_1 email").setValue(...)
firebase.child("firebase url").child("Users").child("user_2 email").setValue(...)
ETC
假设您的数据库看起来像
"BookShelf" : {
"book1" : {
"bookName" : "book1_push"
...
}
你的代码是(不要使用push(),push()生成随机密钥)
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
Book data = new Book();
mDatabase.child("BookShelf").child("book1").setValue(data);
如果您使用的是FirebaseUI:
private static final CollectionReference usersCollection = FirebaseFirestore.getInstance().collection("users");
User user = new User("MyUsername", "MyPictureUrl");
String userKey = "1234567sdfsf8";
usersCollection.document(userKey).set(user); //MAGIC LINE
在 POST 请求中,它将生成 ID,但在 PATCH、PUT 请求中,它将提及您将提供的密钥。
简单快速
Map<String,Object> taskMap = new HashMap<>();
taskMap.put("Name", name.getText().toString());
taskMap.put("km", km.getText().toString());
// taskMap.put("age", "45");
taskMap.put("Day", day.getText().toString());
mDatabaseReference.push().setValue(taskMap);
如果数据库引用子是固定字符串,则不会添加新值。只是它会更新以前的值。例如 :
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference();
String mText = // get data from editText or set your own custom data
现在如果我插入这样的数据:
myRef.child("abc").child("cba").setValue(mText);
每次我插入数据时,它都会更新我以前的数据。它不会添加新数据。因为我的参考在这里是固定的(myRef.child("abc").child("cba")//这个总是固定的)。
现在将子“cba”的值更改为不会修复的随机或动态值。例如:
Random rand = new Random();
// Obtain a number between [0 - 49].
int n = rand.nextInt(50);
myRef.child("abc").child(String.valueOf(n)).setValue(mText);
在这种情况下,它将添加一个新值而不是更新。因为这个时间参考在这里不固定。它是动态的。push() 方法完全相同。它生成随机密钥以保持唯一参考。
如果您使用 Node.js 写入 firebase 实时数据库,这里有一个函数:
function registerVibinScores( reference, childId, dataToWrite){
var ref = db.ref(reference); //vibinScores
usersRef = ref.child(childId);
usersRef.set(
dataToWrite
);
}
//Example to invoke it:
var vibinEntry = {
"viberId": "425904090208534528",
"person": {
"name": "kukur",
"score": 0,
"id": "425904090208534528"
},
"vibinScore": 0,
"timeOfEntry": "2021-04-19T16:59:23.077Z"
}
registerVibinScores('vibinScores/allEntries', 112, vibinEntry);
只是为了分享知识。
如果您使用的是 fire-sharp,您可以按如下方式创建自定义密钥
IFirebaseConfig config = new FirebaseConfig
{
AuthSecret = "SecretKey",
BasePath = "https://abc.firebaseio.com/",
Host = "abc.firebaseio.com/"
};
IFirebaseClient client = new FirebaseClient(config);
var obj = new Users
{
FirstName = "test",
MiddleName = "user",
LastName = "xyz"
};
SetResponse response = client.SetAsync("Profile", "YourID");//you can use Set() as well
response = client.SetAsync("Profile/YourID", obj);//you can use Set() as well