无法使用Functions:Shell将新文档添加到Firestore中的集合中

时间:2019-11-23 23:32:04

标签: javascript firebase google-cloud-platform google-cloud-firestore

我正在尝试使用Firebase外壳将文档添加到Firestore中的子集合中:

firebase functions:shell

运行为我们提供了一个外壳,我们可以在其中运行查询和代码。看来我出于某些奇怪的原因无法add将文档提交给集合。

这是我在shell中运行的脚本:

  await db.collection('balances')
    .doc(docId)
    .collection('history')
    .add({x: 'a'});

这很简单,但是Firebase似乎不喜欢将该对象传递给add函数。

我能够找到在Google Firestore validate.js文件中所有文件都失败的确切行。

function extractBaseClassName(value) {
    let constructorName = 'Object';
    while (Object.getPrototypeOf(value) !== Object.prototype) {
        value = Object.getPrototypeOf(value); // <===== This returns null instead of an Object for some reason
        constructorName = value.constructor.name;
    }
    return constructorName;
}

这是确切的错误消息堆栈:

(node:90760) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'constructor' of null
    at extractBaseClassName (/Users/Moose/Development/crypto-accumulator/functions/node_modules/@google-cloud/firestore/build/src/validate.js:35:33)
    at Object.customObjectMessage (/Users/Moose/Development/crypto-accumulator/functions/node_modules/@google-cloud/firestore/build/src/validate.js:55:26)
    at Object.validateDocumentData (/Users/Moose/Development/crypto-accumulator/functions/node_modules/@google-cloud/firestore/build/src/write-batch.js:608:36)
    at CollectionReference.add (/Users/Moose/Development/crypto-accumulator/functions/node_modules/@google-cloud/firestore/build/src/reference.js:1765:23)
    at runB (repl:43:6)
    at process._tickCallback (internal/process/next_tick.js:68:7)

更新:预感...

我认为问题可能在于,Object.getPrototypeOf(value) !== Object.prototype是一个对象,true在应为false时正在评估{x: 'a'}

1 个答案:

答案 0 :(得分:1)

看来对象不是问题。我试图在Firestore中重现它,并使用以下命令:

let  docId = 'test_document3'
async function f1() { 
    await db.collection('test_collection').doc(docId).collection('inside-collection').add({ x: 'c'}) 
}
f1()

添加文档没有问题。您可以尝试相同的方法。