【问题标题】:Firebase Invalid document reference. Document references must have an even number of segmentsFirebase 无效的文档参考。文档引用必须有偶数个段
【发布时间】:2018-11-12 04:43:29
【问题描述】:

这个查询有什么问题?

const db = firebase.firestore()
const query = db.doc(this.props.user.uid).collection('statements').orderBy('uploadedOn', 'desc').limit(50)

我收到以下错误:

Uncaught Error: Invalid document reference. Document references must have an even number of segments, but FrMd6Wqch8XJm32HihF14tl6Wui2 has 1
    at new FirestoreError (index.cjs.js:346)
    at Function.DocumentReference.forPath (index.cjs.js:15563)
    at Firestore.doc (index.cjs.js:15368)
    at UploadStatementPresentation.componentWillMount (UploadStatementPage.jsx:61)
    at UploadStatementPresentation.componentWillMount (createPrototypeProxy.js:44)
    at callComponentWillMount (react-dom.development.js:6872)
    at mountClassInstance (react-dom.development.js:6968)
    at updateClassComponent (react-dom.development.js:8337)
    at beginWork (react-dom.development.js:8982)
    at performUnitOfWork (react-dom.development.js:11814)

【问题讨论】:

  • 请描述您的数据库布局以及您打算通过此查询访问的集合和文档。

标签: node.js firebase google-cloud-firestore


【解决方案1】:

如果您想通过查询获取文档集合,则不必指定文档 ID。在这种情况下,下面的代码应该可以工作。

const query = db.collection('statements').orderBy('uploadedOn', 'desc').limit(50)

或者如果你想获取文档,你可以将文档 id 传递给 doc() 方法。在那种情况下,代码应该是。

const query = db.collection('statements').doc(this.props.user.uid)

有关查询firestorm数据的更多详细信息:https://firebase.google.com/docs/firestore/query-data/get-data?authuser=0

【讨论】:

    【解决方案2】:

    由于您没有描述您要查询的确切内容,我只想指出所有文档都必须在一个集合中,无一例外。所以,如果你这样说:

    db.doc(this.props.user.uid)
    

    Firestore 假定您传递给 doc() 的字符串包含集合和文档 ID,并用斜杠分隔。但在你的情况下,这似乎不太可能。您需要确定 uid 在哪个集合中,并在构建对要查询的集合的引用时首先使用它。假设您在 uid 文档中有一个 statements 子集合,并且某个其他集合包含该 uid 文档,您必须像这样指定完整路径:

    db.collection('that-other-collection').doc(this.props.user.uid).collection('statements')
    

    当然,只有您知道数据的实际结构。

    【讨论】:

      【解决方案3】:

      对于遇到此问题的其他人,请确保没有文档引用包含空字符串。

      我在使用带有uid 输入的get 方法时遇到了这个问题,忘记检查uid 是否为空

      private fun getFullRef(uid: String): CollectionReference {
              return ref.document(uid).collection(FireContact.SUB_PATH)
          }
      

      【讨论】:

        猜你喜欢
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        • 1970-01-01
        • 2019-05-24
        • 2022-06-16
        相关资源
        最近更新 更多