web-dev-qa-db-fra.com

Firebase Référence de document non valide. Les références de document doivent avoir un nombre pair de segments

Quel est le problème avec cette requête?

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

J'obtiens l'erreur suivante:

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)
5
Jiew Meng

Comme vous n'avez pas décrit exactement ce que vous essayez d'interroger, je soulignerai simplement que tous les documents doivent être dans une collection, sans exception. Donc, si vous dites ceci:

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

Firestore suppose que la chaîne que vous passez à doc() contient à la fois la collection et l'ID du document séparés par une barre oblique. Mais cela semble hautement improbable dans votre cas. Vous devez déterminer dans quelle collection se trouve l'uid et l'utiliser en premier lorsque vous créez la référence à la collection que vous souhaitez interroger. En supposant que vous ayez une sous-collection statements dans le document uid et qu'une autre collection contient le document uid, vous devrez spécifier le chemin complet comme ceci:

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

Bien sûr, vous seul connaissez la structure réelle de vos données.

18
Doug Stevenson

Si vous souhaitez obtenir une collection de documents avec interrogation, vous n'avez pas besoin de spécifier un identifiant de document. Le code ci-dessous devrait fonctionner dans ce cas.

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

Ou si vous souhaitez obtenir le document, vous pouvez transmettre l'ID du document à la méthode doc () . Dans ce cas, le code devrait être.

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

Pour plus de détails sur l'interrogation des données de tempête de feu: https://firebase.google.com/docs/firestore/query-data/get-data?authuser=

0
ctrleffive