将新数据推送到 Firebase 数据库时设置自定义键

Posted

技术标签:

【中文标题】将新数据推送到 Firebase 数据库时设置自定义键【英文标题】:Setting custom key when pushing new data to firebase database 【发布时间】:2016-09-25 18:56:18 【问题描述】:

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

问题:

FireBase.push().setValue(mapped_values);

这给出了如下结构:

如何在那里创建自己的自定义密钥? 比如用户名什么的。

【问题讨论】:

【参考方案1】:

拨打push() 将为您生成一个密钥。

如果您改用child(),您可以自己确定它们的键/路径。

ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");

【讨论】:

他没有将其标记为答案,因为它没有回答他的问题,因为无论您将什么推送或设置到数据库中,Firebase 都会自动生成一个带有随机密钥的孩子。 @FrenchyNYC 如果您使用.child('customkey')...则不是 以及如何用 angularfire2 做到这一点? @*** 在构造函数中设置:constructor(private db: AngularFireDatabase) 你可以这样做:this.db.database.ref().child('somechild').set('somevalue') 2020年应使用set()代替setValue()【参考方案2】:
        String key="1234567sdfsf8";
        //custom object
        User user=new User();
        DatabaseReference mDatabase;
        mDatabase = FirebaseDatabase.getInstance().getReference();
        mDatabase.child("Users").child(key).setValue(user);

【讨论】:

如果key key 不存在则抛出错误,因为setValue 没有定义【参考方案3】:

作为对最佳答案的更新,Firebase API has been changed 和 setValue() 不再起作用。现在您必须改用set() 函数:

ref.child("Victor").set("setting custom key when pushing new data to firebase database");

【讨论】:

【参考方案4】:

您可以使用 setValue() 创建自定义键,即使根目录包含许多子项 例如,如果 'Users' 是 root 并且您想添加以电子邮件为键的用户,它将是这样的

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

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

【讨论】:

【参考方案5】:

假设你的数据库看起来像

 "BookShelf" : 
    "book1" : 
      "bookName" : "book1_push"
       ...
     

你的代码是(不要使用push(),push()生成随机密钥)

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
Book data = new Book();
mDatabase.child("BookShelf").child("book1").setValue(data);
    
     

【讨论】:

【参考方案6】:

如果您使用的是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

【讨论】:

【参考方案7】:

只是为了分享知识。

如果您使用的是 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

【讨论】:

【参考方案8】:

简单快速

 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);

【讨论】:

【参考方案9】:

如果数据库引用子是固定字符串,则不会添加新值。只是它会更新以前的值。例如:

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() 方法完全相同。它生成随机密钥以保持唯一引用。

【讨论】:

【参考方案10】:

在 POST 请求中它会生成 ID,但在 PATCH、PUT 请求中它会提及您将提供的密钥。

【讨论】:

【参考方案11】:

如果您使用 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);

The sample entry in your database would look like this

【讨论】:

以上是关于将新数据推送到 Firebase 数据库时设置自定义键的主要内容,如果未能解决你的问题,请参考以下文章

推送到firebase数据库时如何设置推送键?

如何将新数据从实时数据库推送到 Cloud Firestore?

将新数据从 Node REST API 推送到 React-Native

将新映像推送到 ECR 存储库时如何自动部署到 ECS Fargate

仅将新数据从服务器推送到 iPad

VueJS 将新对象推送到数组,数据不是响应式的