Javascript 使用云功能将文档复制到firestore中的新集合中
路径1-Match_Creator/cricket/matchList; 路径2-Match_Creator/cricket/completedMatchList; 我有一个名为matchList(路径1)的集合,其中有一个名为c434108的文档。 现在我想把这个文档(c434108)移动到路径2Javascript 使用云功能将文档复制到firestore中的新集合中,javascript,node.js,google-cloud-functions,Javascript,Node.js,Google Cloud Functions,路径1-Match_Creator/cricket/matchList; 路径2-Match_Creator/cricket/completedMatchList; 我有一个名为matchList(路径1)的集合,其中有一个名为c434108的文档。 现在我想把这个文档(c434108)移动到路径2 /* eslint-disable promise/catch-or-return */ const functions = require("firebase-functions"); const
/* 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
)
};
我没有看到任何允许您在集合之间移动文档的内容(如果我错了,有人会纠正我)。您必须从旧集合复制到新集合,然后删除旧集合 这是StackOverflow上的另一个问题,它遇到了同样的问题,有人提供了关于如何实现它的Java代码 编辑:更新链接
希望这有帮助。我能解决我的问题 这是我的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
)
};
现在,在将文档数据复制到新路径后,我将删除以前的文档。对于删除文档,我尚未编写该函数。我知道我无法在集合之间移动文档。我只能复制数据。你提供的链接是基于angular的,但我希望它是javascript或NodeJS。我粘贴了错误的链接,我用我提到的Java更新了帖子。我在我的问题中更新了我的代码。当我尝试将从getOldCompletedMatchDocs()函数获取的数据添加/复制到createNewCompletedMatchDocs()函数中尝试执行的新路径时。我得到了一个错误,我得到了一个错误:未处理PromiserEjectionWarning:TypeError:无法读取createNewCompletedMatchDocs(/Users/amansankrit/Desktop/predicta function/functions/completedMatchList.js:54:27)>进程中未定义>的“after”属性未处理的PromisejectionWarning:未处理的承诺拒绝。这个错误源于在没有catch块的异步函数中抛出,或者拒绝promise,我也编辑了代码。你可以在上面查一下