我遇到来自Firebase的新Firestore的问题。
情况:我有class ViewController: UIViewController, UIScrollViewDelegate
我创建了collection('room')
我正在尝试做什么:我需要更新房间。
为此,我使用:collection('room').add(room)
所以我需要在我的集合中的文档中添加ROOM_ID:
collection('room').doc(ROOM_ID).update(update)
有可能实现这一目标吗?
另一种方法是使用以下命令创建自己生成的ID:
|room
ROOM_ID
id:ROOM_ID,
someContent: ForTheQuery
但我想避免它。
答案 0 :(得分:32)
您可以使用doc()创建对具有唯一ID的文档的引用,但不会创建该文档。然后,您可以使用文档参考中提供的唯一ID来设置该doc的内容:
const ref = store.collection('users').doc()
console.log(ref.id) // prints the unique id
ref.set({id: ref.id}) // sets the contents of the doc using the id
.then(() => { // fetch the doc again and show its data
ref.get().then(doc => {
console.log(doc.data()) // prints {id: "the unique id"}
})
})
答案 1 :(得分:9)
<强> ANGULARFIRE:强>
在添加数据库之前获取ID:
.prop
ANDROID FIRESTORE:
var idBefore = afs.createId();
console.log(idBefore );
答案 2 :(得分:2)
您可以使用collection.ref.add(您的项目没有ID)从创建的文档中获取ID,响应(res)将包含使用其中的ID创建的新文档参考。因此,只需执行res.id即可获取ID。
createOne(options: { item: any, ref: AngularFirestoreCollection<any> }) {
const promise = new Promise((resolve, reject) => {
if (options.item) {
// Convert object to pure javascript
const item = Object.assign({}, options.item);
console.log('dataService: createOne: set item: ', item);
options.ref.ref.add(item)
.then((res) => {
console.log('dataService: createOne success: res: ', res);
resolve(res);
}).catch(err => {
console.error('dataService: createOne: error: ', err);
reject(err);
});
} else {
console.log('dataService: createOne: wrong options! options: ', options);
reject();
}
})
return promise;
}
答案 3 :(得分:1)
只需使用.id
即可获取密钥,下面是使用async
/ await
的示例:
const KEYID = async() => (await fs.collection("testing").add({ data: 'test'})).id;