如何在 Firebase Cloud 中将变量值设置为字段名称。网页/HTML

SSo*_*eim 2 html javascript firebase google-cloud-firestore

我正在尝试将我在表单中输入的数据设置为 Firebase 中的字段名称。

它在第 3 行$("#blogUID").val()(博客/blogUID 集合)中运行良好。但是,当我尝试在 Stats/Blogs 集合(第 10 行)中设置字段名称时,出现以下错误:

error.ts:166 Uncaught FirebaseError: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: undefined
    at new ui (https://www.gstatic.com/firebasejs/7.17.1/firebase-firestore.js:1:52471)
    at Vh (https://www.gstatic.com/firebasejs/7.17.1/firebase-firestore.js:1:164122)
    at kh (https://www.gstatic.com/firebasejs/7.17.1/firebase-firestore.js:1:163328)
    at _d.doc (https://www.gstatic.com/firebasejs/7.17.1/firebase-firestore.js:1:280502)
    at HTMLButtonElement.<anonymous> (http://localhost:8080/TeamSolheim_Page1.html:251:36)
    at HTMLButtonElement.dispatch (https://code.jquery.com/jquery-3.5.1.min.js:2:43090)
    at HTMLButtonElement.v.handle (https://code.jquery.com/jquery-3.5.1.min.js:2:41074)
Run Code Online (Sandbox Code Playgroud)
1    $("#blog-submit-button").click(function(){
2        // Add a new document in collection
3        // db.collection("Blogs").doc($("#blogUID").val()).set({
4        //     blogDate:  $("#blogDate").val(),
5        //     blogLink:  $("#blogLink").val(),
6        //     blogTitle: $("#blogTitle").val(),
7        // })
8        // .then(function() { 
9            db.collection("Stats").doc($("Blogs").val()).set({
10                $("#blogUID").val():  $("#blogLikes").val(),
11           })
12           .then(function() { 
                console.log("Document successfully written!");
                $("#blog-form").hide();
                $("#create-form").show();
            })
            .catch(function(error) {
                console.error("Error writing document 2: ", error);
            });
    //     })
    //     .catch(function(error) {
    //         console.error("Error writing document 1: ", error);
    //     });
    })
Run Code Online (Sandbox Code Playgroud)

权限对任何经过身份验证的用户都是开放的:

    match /Stats/Blogs {
      allow read;
      allow write: if request.auth != null;
    }
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

            var _temp  = $("#blogUID").val();
            console.log(_temp);
            db.collection("Stats").doc("Blogs").set($("#blogUID").val, 123)
            //db.collection("Stats").doc("Blogs").val().set({
                //_temp: $("#blogLikes").val(),

                //"$$_temp.val()":  $("#blogLikes").val(),
                //$$_temp:  $("#blogLikes").val(),
                //window['_temp']: $("#blogLikes").val(),
                //$("#blogUID").val: $("#blogLikes").val(),
                //_temp:  $("#blogLikes").val(),
                //'$("#blogUID").val()':  $("#blogLikes").val(),
                //doc.$("#blogUID"): $("#blogLikes").val(),
                //$("#blogUID").val():  $("#blogLikes").val(),
           // })
Run Code Online (Sandbox Code Playgroud)

这是繁荣的最终密码...

    $("#blog-submit-button").click(function(){
        // Add a new document in collection
        db.collection("Blogs").doc($("#blogUID").val()).set({
            blogDate:  $("#blogDate").val(),
            blogLink:  $("#blogLink").val(),
            blogTitle: $("#blogTitle").val(),
        })
        .then(function() { 
            var _temp  = $("#blogUID").val();
            console.log(_temp);
            db.collection("Stats").doc("Blogs").set({
                [_temp]: $("#blogLikes").val()
           })
            .then(function() { 
                console.log("Document successfully written!");
                $("#blog-form").hide();
                $("#create-form").show();
            })
            .catch(function(error) {
                console.error("Error writing document 2: ", error);
            });
        })
        .catch(function(error) {
            console.error("Error writing document 1: ", error);
        });
    })
Run Code Online (Sandbox Code Playgroud)

Lea*_*mer 5

向下移动到格式化的答案:

.set() 需要一个对象——你在第一次尝试时就“接近”了它。尝试这个:

const blogger = $("#blogUID").val() // jQuery
const bloggerLikes = $("#blogLikes").val() // jQuery

db.collection("Stats").doc("Blogs").set( { [ blogger]:  bloggerLikes } )
Run Code Online (Sandbox Code Playgroud)

需要[ ] 来使用博主值作为索引/字段名