我想查询firestore数据库以获取文档ID。目前我有以下代码:
db.collection('books').where('id', '==', 'fK3ddutEpD2qQqRMXNW5').get()
我没有得到结果。但是当我查询不同的字段时,它可以工作:
db.collection('books').where('genre', '==', 'biography').get()
如何调用文档ID的名称?
答案 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")