首页 > 解决方案 > 使用云功能将文档复制到 Firestore 中的新集合中

问题描述

路径 1 - Match_Creator/cricket/matchList;路径 2 - Match_Creator/cricket/completedMatchList;我有一个名为 matchList (Path 1) 的集合,其中我有一个名为 c434108 的文档。现在我想将此文档(c434108)移动到路径 2;

/* eslint-disable promise/catch-or-return */
const functions = require("firebase-functions");
const admin = require("firebase-admin");

const { db } = require("./db/index");

const createCompletedMatchListDoc = (request, response) => {
  completedMatchDocsData();
};

function completedMatchDocsData() {
  createNewCompletedMatchDocs()
 }

function getOldCompletedMatchDocs(){

  var completedMatchesRef = db
  .collection("Match_Creator")
  .doc("cricket")
  .collection("matchList");

  var completedMatchDocData;
  var completedMatchDataArr = [];

return new Promise(resolve => {
    let query = completedMatchesRef
      .where("status", "==", "live")
      .get()
      .then(snapshot => {
        // eslint-disable-next-line promise/always-return
        if (snapshot.empty) {
          console.log("No matching documents.");
          return;
        }

        snapshot.forEach(doc => {
          completedMatchDocData = doc.data();     
          completedMatchDataArr.push(completedMatchDocData);
          resolve(completedMatchDataArr);
        });
        console.log("sarang", completedMatchDataArr[2]);
      })
      .catch(err => {
        console.log("Error getting documents", err);
      });
    });
}

const createNewCompletedMatchDocs = (async(change, context) => {
  let completedMatchData = await getOldCompletedMatchDocs();

  console.log('aman', completedMatchData[1]);

  const newValue = change.after.data();
  const previousValue = change.before.data();

  const st1 =newValue.status;
  const st2 = previousValue.status;
  console.log('I am a log entry' + st1 + ' ' + st2);

  var data = completedMatchData[0];

  return db.collection('Match_Creator').doc('cricket').collection('completedMatchList').add(data)
  .catch(error => {
    console.log('Error writting document: ' + error);
    return false;
  });
})

module.exports = createCompletedMatchListDoc;

复制此文档(c434108)后,我想从路径 1 中删除此文档(c434108)。

我的 index.js 文件是:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const storeMatchData = require("./liveScoring");
const createCompletedMatchListDoc = require("./completedMatchList");

var http = require("https");

module.exports = {
  liveScoring: functions.https.onRequest(storeMatchData),
  createCompletedMatchListDoc: functions.https.onRequest(
    createCompletedMatchListDoc
  )
};

标签: javascriptnode.jsgoogle-cloud-functions

解决方案


我能够解决我的问题。

这是我的 completeMatchList.js 文件

/* eslint-disable promise/catch-or-return */
const functions = require("firebase-functions");
const admin = require("firebase-admin");

const { db } = require("./db/index");

const createCompletedMatchListDoc = (request, response) => {
  completedMatchDocsData();
};

function completedMatchDocsData() {
  setNewCompletedMatchDocs()
 }

function getOldCompletedMatchDocs(){

  var completedMatchesRef = db
  .collection("Match_Creator")
  .doc("cricket")
  .collection("matchList");

  var completedMatchDocData;
  var completedMatchDataArr = [];

return new Promise(resolve => {
    let query = completedMatchesRef
      .where("status", "==", "live")
      .get()
      .then(snapshot => {
        // eslint-disable-next-line promise/always-return
        if (snapshot.empty) {
          console.log("No matching documents.");
          return;
        }

        snapshot.forEach(doc => {
          // completedMatchDocData = doc.data();
          completedMatchDocData = {
            docId: "",
            docData: ""
          } 
          completedMatchDocData.docId = doc.id;
          completedMatchDocData.docData = doc.data();

          completedMatchDataArr.push(completedMatchDocData);
          resolve(completedMatchDataArr); // Here i am getting the data and pushing it in array
        });
        console.log("sarang", completedMatchDataArr);
      })
      .catch(err => {
        console.log("Error getting documents", err);
      });
    });
}

const setNewCompletedMatchDocs = (async () => {
  let getCompletedMatchData = await getOldCompletedMatchDocs();
  // console.log("balram", getCompletedMatchData[0].docId);
  let newCompletedMatchDocRef = db.collection("Match_Creator").doc("cricket").collection("completedMatchList").doc(getCompletedMatchData[0].docId);
  return newCompletedMatchDocRef.set(getCompletedMatchData[0].docData); //set/copy the data to new path.
})

这是我的主要 index.js 文件

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const storeMatchData = require("./liveScoring");
const createCompletedMatchListDoc = require("./completedMatchList");

const { db } = require("./db/index");

var http = require("https");

module.exports = {
  liveScoring: functions.https.onRequest(storeMatchData),
  createCompletedMatchListDoc: functions.https.onRequest(
    createCompletedMatchListDoc
  )
};

现在将文档数据复制到新路径后,我将删除以前的文档。对于删除文档,我没有编写函数。


推荐阅读