尝试在Firestore中创建子集时出错

时间:2018-05-25 21:24:55

标签: firebase google-cloud-firestore

我正在尝试在Google Firebase中创建一个节点,并使用其唯一ID在同一名称的Google Firestore中创建一个文档。

我正在使用Google的PHP Firestore客户端:https://github.com/GoogleCloudPlatform/google-cloud-php-firestore

我已经阅读了他们的文档:http://googlecloudplatform.github.io/google-cloud-php/#/docs/cloud-firestore/v0.5.1/firestore/writebatch

这是我的代码:

<?php

use \Google\Cloud\Firestore\FirestoreClient;
use \Google\Cloud\Core\Timestamp;
use \Google\Cloud\Firestore\Transaction as FirestoreTransaction;
use \grptx\Firebase as FirebaseClient;

class FirestoreTest
{
    public function create()
    {
        $client = new FirebaseClient();
        $database = $client->getDatabase();

        $org = array(
            "acl" => array(),
            "people" => array()
        );

        $ref = $database->getReference("/clients/")->push($org);
        $key = $ref->getKey();

        $config = array(
            "projectId" => "xxx",
            "keyFile" => json_decode(file_get_contents("/xxx/firebase_auth.json"), true)
        );

        $firestore = new FirestoreClient($config);
        $batch = $firestore->batch();
        $collection = $firestore->collection("clients")->document("-LXXXXXX")->collection("trips");
    }
}

我收到了这个错误:

Exception 'Google\Cloud\Core\Exception\BadRequestException' with message '{
"message": "Document name \"projects\/xxx-test\/databases\/(default)\/documents\/clients\/\" has invalid trailing \"\/\".",
"code": 3,
"status": "INVALID_ARGUMENT",
"details": []
}'

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

这是如果您尝试将集合作为文档获得的错误。这有点棘手,因为如果您尝试在集合中获取名称为空字符串的文档,也会发生这种情况。

我不了解PHP,但是我想可能是在您的$ database-> getReference(“ / clients /”)-> push($ org);中。调用时,您应该命名一个文档以将您的信息推送到您的$ firestore-> collection(“ clients”)-> document(“-LXXXXXX”)-> collection(“ trips”)中;表示您要获取的文档(“ -LXXXXXX”)的名称为空字符串。 (当然,这是假设您的文档实际上未命名为“ -LXXXXXX”,而您是用它代替某些恰好等于“”的变量)。

例如,在python中,此调用使我先前随机失败:

db.collection(u'data').document(current_id)

,具有相同的错误:'文档名称“ ... / documents / data /”的尾随“ /”无效。并将退出。”我挠了一下头,但这是因为变量current_id是空字符串。

基本上,Firebase在内部将其转换为长路径名,然后根据您的上次调用内容尝试在该路径名下获取文档或集合。如果您尝试获取名为“”的文档,则会导致问题。

答案 1 :(得分:0)

基本上,如果尝试将空白作为文档名称,则会发生这种情况。