Могу ли я обновлять значения в базе данных firestore в базе данных реального времени в проекте firebase - PullRequest
0 голосов
/ 06 июня 2019

В моей базе данных реального времени есть целочисленное значение, которое я хотел бы синхронизировать с целочисленным значением в моей базе данных firestore.База данных реального времени подается через внешний источник, и когда она получает обновление, я бы хотел, чтобы это было отправлено в базу данных firestore

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

=============== Структура данных ==================

Реальное времябаза данных

user1:  
 { meter : 20 }

Firestore database

Collection: Users
   {Document : user1 
        { meter : 20 }}

/// ============= Пример кода ======================================

const functions = require('firebase-functions');

// Initialize the Firebase application with admin credentials

const admin = require('firebase-admin');
admin.initializeApp();


// Define user sync method

exports.meterSync = functions.database.ref('/user1/meter').onUpdate( (change, context) => {

    // Get a reference to the Firestore document of the changed user
    var userDoc = admin.firestore().doc(`user/${context.params.user1}`);

    const meterReading = change.after.val();
    console.log(meterReading);

    console.log(userDoc); /// Not able to access this

    return null

});

Я ожидаю, что пользователь doc выдаст мне документ, поэтому я могу обновить поля внутри него.Но я получаю объект documentReference, но не знаю, как получить доступ к полю счетчика.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Делая

var userDoc = admin.firestore().doc(`user/${context.params.user1}`);

Вы на самом деле определили DocumentReference.

Вы должны использовать это DocumentReference для записи в базу данных Firestore, используя методы set() или update().

Вот код, использующий метод set():

exports.meterSync = functions.database
  .ref('/{userId}/meter')
  .onUpdate((change, context) => {

    const meterReading = change.after.val();
    console.log(meterReading);

    // Get a reference to the Firestore document of the changed user
    const userDoc = admin.firestore().doc(`user/${context.params.userId}`);

    return userDoc.set(
      {
        meter: meterReading
      },
      { merge: true }
    );
  });
0 голосов
/ 06 июня 2019

Для этого вам понадобятся облачные функции, скажем, у вас есть одна фоновая функция:

export const one = functions.firestore.document('users').onWrite((change, context) => {
      // ... Your code here
})

export const two = functions.database.ref('/users/{userId}')
    .onCreate((snapshot, context) => {
    // ... you code here
})

Поскольку у вас есть доступ к администратору Firebase SDK, вы можете достичь своей цели. Вы можете прочитать больше об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...