当文档存在时,DocumentSnapshot.exists返回false



我正在使用React Native和Firebase Firestore。以下是错误持续存在的代码。它应该显示true,因为文档确实存在于消防仓库中,但它一直返回false。我试着用我在Firestore网站上手动创建的值来测试它,.exists属性为true。但是,当我使用.set创建文档时,它会返回false。有人能解释或解决为什么会发生这种情况吗?我参考了其他StackOverflow文章,但它们没有帮助,因为这似乎不会发生在其他人身上。如果需要更多信息,请告诉我。提前谢谢。

export default class GuestSession extends Component {
state = {
isLoading: true,
users: [],
code: 0
}
constructor(props) {
super(props);
let displayName = firebase.auth().currentUser.displayName
this.state.code = props.route.params.code
const docRef = firebase.firestore().collection('sessions').doc(this.state.code)
docRef.get().then((docSnapshot) => {
if(docSnapshot.exists) {
console.log("exists")
} else {
console.log("doesn't exist")
}
})
this.state.isLoading = false

}
}

我已经解决了我的问题。在动态创建文档时,您需要确保首先创建的是单个文档,而不是包含其他文档的集合的文档。例如,

//dynamic document creation of 2 separate documents
firebase.firestore().collection('sessions').doc(this.state.code)
.collection('users').doc('exampleUserDocument').set({username: username})

应该改为写为

const sessionRef = firebase.firestore().collection('sessions')
sessionRef.doc(this.state.code).set({exampleField: value}) 
//properly sets session document
sessionRef.doc(this.state.code).collection('users').doc('exampleUserDocument').set({username: username})
//properly sets user document

这允许正确创建文档,同时为会话文档和用户文档设置文档的所有属性值。我觉得,当你先做更长的版本时,它会跳过正确创建文档和在会话集合中设置正确的值,为系统节省一些加载时间。这更多的是对所发生事情的假设,而不是事实陈述,但这是我的假设。我希望这对将来的其他人有所帮助。

最新更新