web-dev-qa-db-fra.com

Définition d'une clé personnalisée lors de l'introduction de nouvelles données dans la base de données firebase

Eh bien, je suis nouveau sur Firebase et je veux avoir mes propres clés tout en transmettant de nouvelles données à la base de données.

Problème:

FireBase.Push().setValue(mapped_values);

Cela donne la structure comme ci-dessous:

 database output

Comment puis-je créer ma propre clé personnalisée ici? Tels que le nom d'utilisateur ou quelque chose.

35

L'appel de Push() générera une clé pour vous.

Si vous utilisez plutôt child(), vous pouvez déterminer vous-même la clé/le chemin.

ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");
120
        String key="1234567sdfsf8";
        //custom object
        User user=new User();
        DatabaseReference mDatabase;
        mDatabase = FirebaseDatabase.getInstance().getReference();
        mDatabase.child("Users").child(key).setValue(user);
4
iqbal lone

Vous pouvez créer une clé personnalisée à l'aide de setValue () même si la racine contient de nombreux enfants, par exemple si "Utilisateurs" est la racine et que vous souhaitez ajouter des utilisateurs avec un email comme clé, ce sera comme ceci

firebase.child("firebase url").child("Users").child("user_1 email").setValue(...)

firebase.child("firebase url").child("Users").child("user_2 email").setValue(...)

etc

J'espère que cela t'aides.

2
W2hkZ

Si vous utilisez 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
0
Phil

Dans la requête POST elle générera un identifiant, mais dans la requête PATCH, PUT, elle mentionnera la clé qui vous sera fournie.

0
pramod singh

si l'enfant de référence de base de données est une chaîne fixe, la nouvelle valeur ne sera pas ajoutée. juste il va mettre à jour la valeur précédente. par exemple :

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(); String mText = // get data from editText or set your own custom data

maintenant, si j'insère des données comme ceci:

myRef.child("abc").child("cba").setValue(mText);

chaque fois que j'insère des données, mes données précédentes sont mises à jour. Cela n'ajoutera pas de nouvelles données. Parce que ma référence est fixée ici (myRef.child("abc").child("cba") // celle-ci, qui est toujours fixée).

Maintenant changez la valeur de l'enfant "cba" en une valeur aléatoire ou dynamique qui ne sera pas corrigée. Par exemple:

Random Rand = new Random(); // Obtain a number between [0 - 49]. int n = Rand.nextInt(50); myRef.child("abc").child(String.valueOf(n)).setValue(mText);

Dans ce cas, il va ajouter une nouvelle valeur au lieu de mettre à jour. parce que cette référence de temps n'est pas fixée ici. c'est dynamique. La méthode Push () fait exactement la même chose. il génère une clé aléatoire pour maintenir une référence unique.

0
Arafat

Juste pour partager les connaissances.

si vous utilisez la technologie Fire-Sharp, vous pouvez créer la clé personnalisée comme suit.

            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
0
Talha

Simple et rapide

 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);
0
Tarsbir Singh