Как создать подпапку и документ в сети Firestore? - PullRequest
0 голосов
/ 12 февраля 2020

Я новичок ie с Firebase, и я хочу использовать Firestore для хранения содержимого реестра пользователей. У меня есть коллекция под названием «пользователи», и у каждого пользователя есть «регистр», который должен содержать JSON документ и «месячные», который должен быть коллекцией или массивом документов. На данный момент я попытался просто добавить «регистр» документ с двумя полями:

async saveUser(user) {
      var db = firebase.firestore();
      await db
        .collection("users")
        .doc(user.uid)
        .doc("register")
        .set(
          {
            name: user.displayName,
            email: user.email
          },
          {
            merge: true
          }
        );
    },

, но ошибка показывает:

Uncaught (in promise) TypeError: db.collection(...).doc(...).doc is not a function
    at _callee$ (Login.vue?7463:75)
    at tryCatch (runtime.js?96cf:45)
    at Generator.invoke [as _invoke] (runtime.js?96cf:271)
    at Generator.prototype.<computed> [as next] (runtime.js?96cf:97)
    at asyncGeneratorStep (asyncToGenerator.js?1da1:3)
    at _next (asyncToGenerator.js?1da1:25)
    at eval (asyncToGenerator.js?1da1:32)
    at new Promise (<anonymous>)
    at VueComponent.eval (asyncToGenerator.js?1da1:21)
    at VueComponent.saveUser (Login.vue?7463:75)

Итак, как я могу создать эту структуру и обновить easyest

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

В Firestore документы не могут содержать сразу вложенные документы. Если вы хотите организовать документ под другим документом, вам нужно будет выбрать имя вложенной коллекции, а затем использовать его для создания документов, вложенных в эту вложенную коллекцию:

await db
    .collection("users")
    .doc(user.uid)
    .collection("data")
    .doc("register")
    .set(...)

Здесь я просто выбрал имя " данные "для подбора. Вы должны организовать свои данные таким образом, чтобы они имели смысл для запросов, которые вы собираетесь выполнять.

1 голос
/ 12 февраля 2020

Как ответил Дуг, вы можете хранить эти значения во вложенной коллекции.

Но если значения являются единичными (они не являются коллекцией), я обычно храню их непосредственно в пользовательском документе. Итак:

async saveUser(user) {
  var db = firebase.firestore();
  await db
    .collection("users")
    .doc(user.uid)
    .set(
      {
        name: user.displayName,
        email: user.email
      },
      {
        merge: true
      }
    );
},

Если вы уже храните другие данные для пользователя, вы можете сохранить новые данные как вложенные поля в этом же документе с помощью:

async saveUser(user) {

  var db = firebase.firestore();
  await db
    .collection("users")
    .doc(user.uid)
    .set({
      register: {
        "name": user.displayName,
        "email": user.email
      }}, {
        merge: true
      }
    );
},
...