Как правильно использовать arrayUnion в Firestore? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь добавить новый объект javascript в поле массива в коллекции Firestore, используя Node.js Firebase Admin SDK.

Я уверен, что do c, на который я нацелен есть поле, о котором идет речь, но я продолжаю получать ошибку: TypeError:

Cannot read property 'arrayUnion' of undefined

Я знаю об этом вопросе , но исправление не помогает.

Любая помощь приветствуется.

Рассматриваемый маршрут:

router.post("/create-new-user-group", async (req, res) => {
  try {
    const { userId, usersName, groupName } = req.body;

    if (!userId || !usersName || !groupName) return res.status(422).send();

    const groupRef = await db.collection("groups").doc();

    const group = await groupRef.set({
      id: groupRef.id,
      name: groupName,
      userId,
      members: [{ id: userId, name: usersName, isAdmin: true }],
    });
    
    const response = await db
    .collection("users")
    .doc(userId)
    .update({
      groups: fbApp.firestore.FieldValue.arrayUnion({
        id: userId,
        name: userName,
      }),
    });


    res.send(group);
  } catch (error) {
    console.log("error creating new group:", error);
    res.status(400).send(error);
  }
});

firebaseInit. js:

const admin = require("firebase-admin");
const serviceAccount = require("../serviceAccount.json");

const firebaseApp = admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://xxx-xxxxx.firebaseio.com",
});

exports.fbApp = firebaseApp;

1 Ответ

1 голос
/ 06 августа 2020

Ошибка сообщает вам, что fbApp.firestore.FieldValue не определено. Итак, у него нет никаких свойств или методов, которые вы могли бы вызвать.

Если вы хотите использовать FieldValue, вам нужно будет обратиться к нему через импорт пространства имен firebase-admin, а не через инициализированный экземпляр приложения.

const admin = require("firebase-admin");
const FieldValue = admin.firestore.FieldValue;

// now you can write FieldValue.arrayUnion(...)
...