Firebase - Firestore - 使用collection.add()获取密钥

时间:2017-10-14 18:07:04

标签: firebase google-cloud-firestore

我遇到来自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

但我想避免它。

4 个答案:

答案 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)

Firebase Javascript SDK:

只需使用.id即可获取密钥,下面是使用async / await的示例:

  const KEYID = async() => (await fs.collection("testing").add({ data: 'test'})).id;