Kle*_*ano 14 javascript firebase google-cloud-firestore
我正在使用 Firestore Web 8 的链接模式,但我无法将其更新到模块 9,并且很难弄清楚如何获取我的子集合(我的集合中的集合)的所有内容。
我的旧功能是这样的并且工作正常:
function getInfo(doc_name) {
let infoDB = db
.collection("collection_name")
.doc(doc_name)
.collection("subcollection_name")
.get();
return alunoHistorico;
}
Run Code Online (Sandbox Code Playgroud)
所以用模块方式我尝试了这段代码
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
const docRef = doc(db, "collection_name", "doc_name");
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!");
}
Run Code Online (Sandbox Code Playgroud)
但是函数 doc() 需要一个偶数参数(不包括 db 参数),所以如果我尝试使用像这样的 3 个参数,我会收到一个错误:
const docRef = doc(db, "collection_name", "doc_name", "subcollection_name");
Run Code Online (Sandbox Code Playgroud)
为了让它工作,我必须传递子集合中的确切文档
const docRef = doc(db, "collection_name", "doc_name", "subcollection_name", "sub_doc");
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用,因为我在子集合中有一个操作系统文档列表,我想要检索它。那么如何才能将所有文档放入我的子集合中呢?
感谢任何花时间的人。
Dha*_*raj 24
您需要使用collection()
get aCollectionReference
而不是doc()
return a DocumentReference
:
const subColRef = collection(db, "collection_name", "doc_name", "subcollection_name");
// odd number of path segments to get a CollectionReference
// equivalent to:
// .collection("collection_name/doc_name/subcollection_name") in v8
// use getDocs() instead of getDoc() to fetch the collection
const qSnap = getDocs(subColRef)
console.log(qSnap.docs.map(d => ({id: d.id, ...d.data()})))
Run Code Online (Sandbox Code Playgroud)
doc()
我在这里写了关于and collection()
(in V8
and )之间差异的详细答案V9
:
Firestore:在 Web v9 中添加新数据的模式是什么?
小智 9
如果有人想使用 Modular Firebase V9 中的 onSnapshot 获取子集合内文档的实时更新,您可以通过以下方式实现:
import { db } from "./firebase";
import { onSnapshot, collection } from "@firebase/firestore";
let collectionRef = collection(db, "main_collection_id", "doc_id", "sub_collection_id");
onSnapshot(collectionRef, (querySnapshot) => {
querySnapshot.forEach((doc) => {
console.log("Id: ", doc.id, "Data: ", doc.data());
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12264 次 |
最近记录: |