Как сделать sh объект в массиве с помощью arrayUnion () в Firebase Firestore? - PullRequest
0 голосов
/ 03 августа 2020

Мой текущий документ выглядит так:

{
    "assignmentName": "OS Assignment-2",
    "dueDate": "10 August",
    "createdAt": "2020-08-02T20:27:28.916Z",
    "maxMarks": 10,
    "facutyName": "Dr. Muskan Gupta",
    "semester": "3",
    "submittedBy": [
        {
            "studentName": "Test name",
            "downloadUrl": "URL"
        },
        {
            "downloadUrl": "URL3",
            "studentName": "Test name2"
        },
        {
            "downloadUrl": "https://downloadthisfile.com",
            "studentName": "Nakshatra Saxena"
        },
        {
            "studentName": "Hello Bortehr",
            "downloadUrl": "httpsav"
        }
    ],
    "program": "CSE",
    "subject": "Operating System with UNIX"
}

Я хочу указать sh объект в поле 'submitBy', но получаю сообщение об ошибке. Код, который я использую прямо сейчас:

const submittedAssignment = {
    studentName: req.body.studentName,
    downloadUrl: req.body.downloadUrl,
    };
    admin
        .firestore()
        .collection("assignments")
        .doc(req.params.assignmentId)
        .update({
          submittedBy: firebase.firestore.FieldValue.arrayUnion(submittedAssignment)
        });
    })
    .then(() => {
      return res
        .status(201)
        .json({ message: `Assignment submitted successfully` });
    })
    .catch((err) => {
      console.error(err);
      res.status(500).json({ error: `Error submitting assignment` });
    });

Но я получаю эту ошибку

Ошибка: Update () требует либо одного объекта JavaScript, либо чередующийся список пар поле / значение, за которым может следовать необязательное предварительное условие. Значение аргумента "dataOrField" не является допустимым документом Firestore. Не удалось сериализовать объект типа «FieldValueDelegate» (найден в поле «submitBy»). Firestore не поддерживает объекты JavaScript с настраиваемыми прототипами (т. Е. Объекты, созданные с помощью оператора «new»).

1 Ответ

2 голосов
/ 03 августа 2020

Вы смешиваете SDK Firestore. Если вы используете Admin SDK для выполнения обновления, вам также необходимо использовать Admin SDK для указания значений типа FieldValue.

Вместо этого:

      submittedBy: firebase.firestore.FieldValue.arrayUnion(submittedAssignment)

Используйте это:

      submittedBy: admin.firestore.FieldValue.arrayUnion(submittedAssignment)
...