查询firestore数据库以获取文档ID

时间:2017-12-18 21:35:52

标签: javascript firebase google-cloud-firestore

我想查询firestore数据库以获取文档ID。目前我有以下代码:

db.collection('books').where('id', '==', 'fK3ddutEpD2qQqRMXNW5').get()

我没有得到结果。但是当我查询不同的字段时,它可以工作:

db.collection('books').where('genre', '==', 'biography').get()

如何调用文档ID的名称?

8 个答案:

答案 0 :(得分:22)

我来晚了一点,但是实际上有一种方法可以做到

db.collection('books').where(firebase.firestore.FieldPath.documentId(), '==', 'fK3ddutEpD2qQqRMXNW5').get()

当您处理Firebase安全规则并且只想查询允许访问的记录时,这可能很有用。

答案 1 :(得分:14)

试试这个:

db.collection('books').doc('fK3ddutEpD2qQqRMXNW5').get()

(第一个查询正在寻找一个名为'id'的显式用户设置字段,这可能不是你想要的。)

答案 2 :(得分:11)

您可以使用__name__关键字在查询中使用您的文档ID。

您可以代替这个db.collection('books').doc('fK3ddutEpD2qQqRMXNW5').get()来写

db.collection('books').where('__name__', '==' ,'fK3ddutEpD2qQqRMXNW5').get()

在这种情况下,您应该返回长度为1的数组。

firebase文档在规则文档中提到了此功能。 https://firebase.google.com/docs/reference/rules/rules.firestore.Resource

答案 3 :(得分:3)

firebase.firestore().collection("Your collection").doc(documentId).get().then( (docRef ) => {    
      console.log(doc.data())          
    }).catch( (error) => { })

答案 4 :(得分:0)

我能够使用以下方法在AngularFire中按ID进行搜索:

this.db
  .collection<CollectionItem>('collectionName', ref => {
    return ref
      .orderBy(firestore.FieldPath.documentId())
      .startAt(query)
      .endAt(`${query}\uf8ff`);
  })
  .snapshotChanges()

感谢@Denys Mikhalenko!

答案 5 :(得分:0)

Firestore docs中获取文档。

var docRef = db.collection("cities").doc("SF");

docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});

答案 6 :(得分:0)

只需在此处清除混乱

请记住,无论是获取完整的async/await还是单个collection,都应使用doc来获取数据。

async function someFunction(){
 await db.collection('books').doc('fK3ddutEpD2qQqRMXNW5').get();
}

答案 7 :(得分:0)

2021 年 6 月

新的 v9 modular sdk 是 tree-shakeable,可以生成更小的编译应用程序。推荐用于所有新 Firestore 应用。

import { doc, getDoc } from "firebase/firestore";

const snap = await getDoc(doc(db, 'books', 'fK3ddutEpD2qQqRMXNW5'))

if (snap.exists()) {
  console.log(snap.data())
}
else {
  console.log("No such document")
}

这是基于 firestore docs

中的示例
import { doc, getDoc } from "firebase/firestore";

const docRef = doc(db, "cities", "SF");
const docSnap = await getDoc(docRef);

if (docSnap.exists()) {
  console.log("Document data:", docSnap.data());
}
else {
  // doc.data() will be undefined in this case
  console.log("No such document!");
}

你可以把它变成一个辅助函数

async function getDocument (coll, id) {
  const snap = await getDoc(doc(db, coll, id))
  if (snap.exists())
    return snap.data()
  else
    return Promise.reject(Error(`No such document: ${coll}.${id}`))
}

getDocument("books", "fK3ddutEpD2qQqRMXNW5")