[英]Save ID to Firestore document
我还想将文档的 id 保存为属性,而不仅仅是作为集合的参考。 目前我是这样保存的:
const newSet: AngularFirestoreDocument<SetModel> = this.AngularFirestore.doc('users/' + this.navParams.data.userId);
// adding user to our ddbb
newSet.collection('sets').add(this.set)
.then(function (docRef) {
// ok
})
.catch(function (error) {
// error
});
那可能吗? 还是我需要保存它,获取 id 并再次更新它?
1 - 创建一个常量 ID。 2 - 在对象中设置 id。 3 - 保存
createEvent(set){
const id = this.firestore.createId();
set.id = id;
return this.firestore.doc(`users/${id}`).set(ev);
}
通过快速扫描CollectionReference.add(...)
的参考文档,我看到add(...)
返回一个承诺。 在创建文档之前,似乎无法获取自动生成的 ID。
但请记住,文档 ID 只是在统计上保证唯一的客户端密钥。
此代码显示了 JavaScript SDK 为生成 ID 所做的工作,这归结为调用AutoId.newId()
。 您也可以在您自己的代码中调用(或在它未公开导出的情况下包含)它,然后使用doc(myId)
而不是add()
。
如果这仍然是一个问题,这是我发现的,您需要创建一个空文档并获取 id,然后设置文档内容。 在你的情况下,它会是这样的。
const newDoc = newSet.collection('sets').doc()
const newDocRef = await newDoc.get()
现在设置整个文档:
await newSet.collection('sets').doc(newDocRef.id).set({
docId: newDocRef.id,
// res of the document
})
我用这个来获取我的文件:
this.itemsCollection.valueChanges()
我把它改成:
this.sets = this.itemsCollection.snapshotChanges()
现在我可以使用$key
获取他们的 id 并更新我的文档而无需额外的参考。
更多信息:
https://github.com/angular/angularfire2/issues/1278
编辑:这是我需要的解决方案,但不完全是我在这里寻找的
如果您的目的是在查询集合时知道记录的 ID,我认为这将是一个很好的解决方案。
firebase.firestore().collection('sets').get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
this.sets.push({ ...doc.data(), id: doc.id })
})
})
.catch(error => {
console.log(error)
})
这显示了如何在文档中设置自己的 ID,将 MY_ID 替换为您自己的 ID,然后使用 SET 命令将对象存储到文档中。 此函数返回void,因此您无法检查或获取任何回调。
db.collection("persons").doc("MY_ID").set({
name: "JOHN",
})
这个例子展示了如何在 person 集合中存储一个 obj。 以约翰的名字命名。
这就是我最终这样做的方式。 我创建一个文档,然后在收到承诺后添加数据。
firebase.firestore.collection('instances').doc("WDXmpzpY1TWRIJjeBNrx")
.collection("suppliers").add({}).then(docRef
=> {
firebase.firestore.collection('instances').doc("WDXmpzpY1TWRIJjeBNrx")
.collection("suppliers").doc(docRef.id).set({
name:this.supplierForm.name,
phone:this.supplierForm.phone,
email:this.supplierForm.email,
address:this.supplierForm.address,
gstNo:this.supplierForm.gstNo,
uniqueID: docRef.id,
})
}).catch(err => {console.log(err)})
这里有其他选择。
在 Firebase 中:
saveAlert(alert: Alert) {
const alertsCollection = this.firestore.collection<Alert>('alerts');
const id = this.firestore.createId();
alert.code = id;
return alertsCollection.doc(id).set(alert);
}
在 NodeJS 中:
app.post('/', async (req, res) => {
const data = {
code: '',
name: req.body.name,
description: req.body.description
}
const reference = db.collection('alerts').doc();
data.code = reference.id;
await reference.set(data);
res.json({ status: 'success', data: { alert: data } });
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.