【问题标题】:How to structure my data in Firebase using NodeJS如何使用 NodeJS 在 Firebase 中构建我的数据
【发布时间】:2018-10-18 17:48:50
【问题描述】:

我希望我的数据的结构如下:

Student -> Reg_num -> someindex(将从 1 开始 - 就像 唯一键)-> 课程详情。

但是,我编写的代码给了我一个不正确的结构。谁能帮我解决一下。

var db = admin.database();
var ref = db.ref("Students");
var newMessageRef = ref.push();

exports.uploadFile = functions.https.onRequest((req, res) => {
      cors(req, res, () => {
        var uniqueID = 97888888888888;
        if (req.method !== 'POST') {
            return res.status(500).json({
                message: 'Not allowed'
            })
        } else {
             return newMessageRef.set({
              [uniqueID]: {
                course: req.body.course,
                credits: req.body.credit,
                lecturer : 'Prof. Lee'
              }
            }).then(() => {

               res.status(200).json({
                   message: "okkkkasss"
                });
 ...

注意:-LC-lS2HPMbZW9AdT19K 是从代码中自动添加的代码。这是因为我使用了ref.push()

【问题讨论】:

  • 到底出了什么问题?除非索引不完全是 0、1、2 等事实,否则我看不出所需结构和你得到的结构有什么不同。
  • 我需要用 uniqueCourseKey (-LC-lS2HPMbZW9AdT19K) 翻转97888888888888(这是学生证)的位置——我希望它是 0、1、2 等。我想列出学生在其学生 ID 下修读的所有课程。所以,会有一个 Node 是学生 ID,当我展开它时,我将能够看到学生所修读的所有课程。

标签: javascript node.js firebase firebase-realtime-database google-cloud-firestore


【解决方案1】:

不要使用ref.push()ref.set(),而是ref.update()如下:

const db = admin.database();
const ref = db.ref("Students");
//var newMessageRef = ref.push();  <- Don't do that

exports.uploadFile = functions.https.onRequest((req, res) => {
      cors(req, res, () => {

        const uniqueID = 97888888888888;  <- Student ID
        const uniqueCourseKey = 0;  <- uniqueCourseKey

        if (req.method !== 'POST') {
            return res.status(500).json({
                message: 'Not allowed'
            })
        } else {
             return ref.child(uniqueID).update({
                  [uniqueCourseKey]: {
                        course: req.body.course,
                        credits: req.body.credit,
                        lecturer : 'Prof. Lee'
                      }         
               }).then(() => {
                   res.status(200).json({
                   message: "okkkkasss"
                });
....

然后你可以再次调用云函数,例如const uniqueCourseKey = 1;并且新节点将正确添加到StudentID节点下。

更新方法的文档在这里:https://firebase.google.com/docs/reference/js/firebase.database.Reference#update

【讨论】:

  • Renaud Tarnec,您建议在这种情况下不使用推送还是“从不”使用推送?你能更好地解释这个吗?谢谢
  • @lesimoes push 将使用自动生成的唯一密钥创建新数据,请参阅firebase.google.com/docs/reference/js/…。密钥将类似于 -IKo28nwJLH0Nc5XeFmj。在大多数情况下,这完全没问题,但 OP 想使用他自己的密钥。由于他想更新一个节点,我建议使用 update()。他本可以使用 set(),但在这种情况下,他会覆盖节点上的现有数据。希望这会有所帮助。
  • @lesimoes 所以换句话说,我不建议“永远不要使用 push()”。只需根据您的需要选择方法:设置、推送或更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多