Articles of google cloud firestore

使用.limit()和Firestore查询

我有一个使用Firestore作为队列的应用程序。 数据来自另一个来源,存储在Firestore的/data/{id} , unprocessed的属性设置为true。 在我的Node.js脚本中,我想要一次查询这些未处理的logging,以缓慢地处理它们。 有成千上万的logging,所以试图将它们全部加载到内存中会使进程崩溃。 码: firestore.collection('data').where('unprocessed', '==', true).limit(25).onSnapshot((snapshot) => { snapshot.forEach((doc) => { processItem(doc); }); }); processItem()函数执行必要的处理,将数据保存回Firestore, unprocessed属性设置为false。 我正在运行的问题是,任何时候我试图运行这个代码,我得到以下错误: Error: Error 3: Order must include __name__ at sendError (C:\[myApp]\node_modules\@google-cloud\firestore\src\watch.js:254:15) at DestroyableTransform.stream.on.proto (C:\[myApp]\node_modules\@google-cloud\firestore\src\watch.js:532:13) at emitOne (events.js:115:13) at DestroyableTransform.emit (events.js:210:7) at addChunk (C:\[myApp]\node_modules\readable-stream\lib\_stream_readable.js:284:12) at readableAddChunk (C:\[myApp]\node_modules\readable-stream\lib\_stream_readable.js:271:11) at DestroyableTransform.Readable.push (C:\[myApp]\node_modules\readable-stream\lib\_stream_readable.js:238:10) at DestroyableTransform.Transform.push (C:\[myApp]\node_modules\readable-stream\lib\_stream_transform.js:146:32) at afterTransform (C:\[myApp]\node_modules\readable-stream\lib\_stream_transform.js:102:51) […]

如何在Cloud Functions Firestore中处理读写操作

我有点困惑如何重构我的代码读取和写入没有嵌套的承诺。 在写入对象时,如果该对象有一个标志设置,我想用新的计数来更新它的“相关”对象。 我有两个问题。 1)嵌套承诺从读取然后写入。 2)我应该回来什么 exports.updateRelationshipCounts = functions.firestore .document('masterProduct/{nfCode}').onWrite((event) => { //on writing of record: var newProduct = event.data.data(); if (newProduct.isGlutenFreeYN === 'Y') { console.log('Gluten Free'); //Update GF count in the Brand Object: var db = admin.firestore(); var docRef = db.collection("masterBrand").doc(newProduct.brandNFCode); var doc = docRef.get() .then(doc => { doc.glutenFreeCount = doc.glutenFreeCount + 1 docRef.set(newProduct.brand) .then(function […]

Firebase云function与云Firestore的麻烦

我在以前的项目中使用过这个Firebase数据库代码: const getDeviceUser = admin.database().ref(`/users/${notification.to}/`).once('value'); 我现在正试图将其转换为Firestore。 我基本上是试图让我的用户fcm当通知正在发送。 我已经尝试了很多东西,但还没有看到实现这一目标的新方法。 编辑:这是我的代码。 exports.sendFavoriteNotification = functions.firestore.document('users/{userUid}/notifications/{notificationId}').onCreate(event => { const notification = event.data.data(); const user = event.params.userUid; const getDeviceUser = admin.database().ref(`/users/${notification.to}/`).once('value'); // Get the follower profile. const getProfilePromise = admin.auth().getUser(notification.sender); return Promise.all([getDeviceUser, getProfilePromise]).then(results => { const tokensSnapshot = results[0]; const liker = results[1]; // Check if there are any device […]

如何使用node.js代码在Firestore中创build一个集合

我无法弄清楚如何用node.js firestore api创build一个新的Collection。 有什么build议么?

在从我的承诺/function返回之前等待forEach完成

我正在使用Firebase Cloud Firestore,但是,我认为这可能是更多的JavaScriptasynchronous与同步承诺返回问题。 我正在做一个查询来从一个集合中获取ID,然后循环查询的结果从另一个集合中查找基于该ID的单个logging。 然后我想将每个find的logging存储到一个数组中,然后返回整个数组。 results.length始终为0,因为return results在forEach完成之前触发。 如果我从forEach内部打印results.length它有数据。 我怎么才能等到forEach完成之后才从外部承诺和外部函数本身返回呢? getFacultyFavoritesFirebase() { var dbRef = db.collection("users").doc(global.user_id).collection("favorites"); var dbQuery = dbRef.where("type", "==", "faculty"); var dbPromise = dbQuery.get(); var results = []; return dbPromise.then(function(querySnapshot) { querySnapshot.forEach(function(doc) { var docRef = db.collection("faculty").doc(doc.id); docRef.get().then(function(doc) { if (doc.exists) { results.push(doc); } }) }); console.log(results.length); return results; }) .catch(function(error) { console.log("Error getting […]

ORM for firestore

是否有任何支持nodejs中的firestore的ORM? 我特别喜欢Python中的ndb。

承诺的正确解决scheme

我有连接到firebase的node.js上的应用程序。 我需要正确更新数据。 如何在函数getOrSetUserTrackDay(day)中调用promise来获得一个很好的值,但不是undefined? let userData = []; let userID = req.params.userID; let today = req.params.today; let yesterday = req.params.yesterday; db.collection('users').doc(userID).get() .then((userDataFromDB) => { if (!userDataFromDB.exists) { res.status(404).send('User not found'); } else { function getOrSetUserTrackDay(day) { let userTrackRef = db.collection('history').doc('daily').collection(day).doc(userID); userTrackRef.get() .then(userTrackData => { if (userTrackData.exists) { return userTrackData.data(); // good } else { let userNewData […]

Firebase云端function/ Firestore

我试图运行一个firebase云计算function来为Angular 5项目创build一个primefaces(批量)更新,无论何时创build一个新客户。 我一直得到这个错误,不能解决问题是什么: console.error 错误:无法将types([对象未定义])编码为Function.encodeValue上的Firestore值(/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/src/document.js:658:11) 云端函数(index.js) const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); const stripe = require('stripe')(functions.config().stripe.testkey); // 1. Create Stripe User on sign up exports.createStripeCustomer = functions.auth.user().onCreate(event => { // user auth data const user = event.data; // register Stripe user return stripe.customers.create({ email: user.email }) .then(customer => { const db = […]

Nodejs,Cloud Firestore上传任务 – 身份validation错误:错误:套接字挂断

我正在编写一个运行API调用的函数,并通过偏移量从一个巨大的数据库顺序请求JSON。 parsingJSON响应,然后将其中的后续数据上传到我们的Cloud Firestore服务器。 Nodejs(Node 6.11.3)和最新的Firebase Admin SDK 信息按预期parsing,并完美地打印到控制台。 当数据尝试上传到我们的Firestore数据库,但是,控制台被垃圾邮件与错误消息: 身份validation错误:错误:套接字挂断 (节点:846)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:-Number-):错误:从插件获取元数据失败,错误:套接字挂断 偶尔: 身份validation错误:错误:读取ECONNRESET forEach函数收集下载的JSON中的项目,并在上传到Firestore数据库之前处理数据。 每个JSON都有多达1000个数据项(1000个文档值)通过forEach函数。 我知道这可能是一个问题,如果function重复之前上传设置完成? 我是一个编码新手,并明白,这个function的控制stream是不是最好的。 但是,我无法find有关控制台打印错误的任何信息。 我可以find大量有关套接字挂起的信息,但没有在validation错误部分。 我使用生成的服务帐户JSON作为凭据访问我们的数据库,该数据库使用firebase-adminsdk帐户。 我们对数据库的读/写规则目前是开放的,以允许任何访问(因为我们正在开发没有真正的用户)。 这是我的function: Firebase初始化和偏移调零 const admin = require('firebase-admin'); var serviceAccount = require("JSON"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "URL" }); var db = admin.firestore(); var offset = 0; var failed = false; 运行function并设置HTTP头 var runFunction = function runFunction() […]

在Firestore(NodeJS)文档中设置DocumentReference

我正在尝试使用NodeJS v8.6.0创build一个带有Firestore参考的文档。 喜欢这个 const admin = require('firebase-admin') admin.initializeApp({ credential: MY_CREDENTIAL, databaseURL: MY_DB_URL }) const db = admin.firestore() const ref = db.doc('foo/someDoc') db.doc('bar/targetDoc').set({ link: ref }) 虽然ref是一个DocumentReference ,但它的结果 错误:参数“数据”不是有效的文档。 input对象比20级更深或包含一个循环。 有没有在NodeJS(pipe理员)SDK上做到这一点? 另外,代码中使用的包是 "firebase-admin": "^5.4.1" 和 console.log(ref) 输出 DocumentReference { _firestore: Firestore { makeAuthenticatedRequest: { [Function: makeAuthenticatedRequest] getCredentials: [Function: bound getCredentials], authClient: [Object] }, authClient: Auth { […]