在 Firebase Firestore 中映射集合快照的项目
Map items of collection snapshot in Firebase Firestore
Firebase Firestore Guides 显示如何使用 forEach
:
迭代集合快照中的文档
db.collection("cities").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
});
});
我以为它也会支持 map
,但事实并非如此。如何映射快照?
答案是:
querySnapshot.docs.map(function(doc) {
# do something
})
The Reference page for Firestore 显示快照上的 docs
属性。
docs non-null Array of non-null firebase.firestore.DocumentSnapshot
An array of all the documents in the QuerySnapshot.
这是另一个例子
var favEventIds = ["abc", "123"];
const modifiedEvents = eventListSnapshot.docs.map(function (doc) {
const eventData = doc.data()
eventData.id = doc.id
eventData.is_favorite = favEventIds.includes(doc.id)
return eventData
})
对 Firestore return 在他们的 类 之类的东西感到厌倦。这是一个帮助器,如果你给它一个 db
和 collection
它会 return 该集合中的所有记录作为解析实际数组的承诺。
const docsArr = (db, collection) => {
return db
.collection(collection)
.get()
.then(snapshot => snapshot.docs.map(x => x.data()))
}
;(async () => {
const arr = await docsArr(myDb, myCollection)
console.log(arr)
})()
我发现使用 map 并获取文档 ID 的更好方法如下:
从我希望在您的构造函数中更新的对象数组开始:
this.state = {
allmystuffData: [
{id: null,LO_Name: "name", LO_Birthday: {seconds: 0, nanoseconds: 0},
LO_Gender: "Gender", LO_Avatar: "https://someimage", LO_Type: "xxxxx"},],
};
并在我的函数中执行以下操作
const profile = firebase
.firestore()
.collection("users")
.doc(user.uid)
.collection("stuff")
.get()
.then( async (querySnapshot) => {
console.log("number of stuff records for ",user.uid," record count is: ",
querySnapshot.size);
const profile = await Promise.all(querySnapshot.docs.map( async (doc) => {
const stuffData = doc.data()
stuffData.id = doc.id
condole.log("doc.id => ",doc.id)
return stuffData
}));
this.setState({allmystuffData: profile});
})
.catch(function (error) {
console.log("error getting stuff: ", error);
})
在这个例子中,我读取了集合中的所有文档,并在映射时使用了查询快照。 promise.all 确保在将其呈现到屏幕之前返回所有记录。我将文档 ID 添加到返回数组中每个对象的“id”元素,然后我使用 setstate 将我的状态数组替换为从查询返回的数组。
// https://firebase.google.com/docs/firestore/query-data/get-data
const querySnapshot = await db.collection("students").get();
// https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot?authuser=0#docs
querySnapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() }));
你可以试试这个
FirebaseFirestore.instance
.collection('Video_Requests')
.get()
.then((QuerySnapshot querySnapshot){querySnapshot.docs.forEach((doc){
print(doc.data());
});
});
Firebase Firestore Guides 显示如何使用 forEach
:
db.collection("cities").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
});
});
我以为它也会支持 map
,但事实并非如此。如何映射快照?
答案是:
querySnapshot.docs.map(function(doc) {
# do something
})
The Reference page for Firestore 显示快照上的 docs
属性。
docs non-null Array of non-null firebase.firestore.DocumentSnapshot
An array of all the documents in the QuerySnapshot.
这是另一个例子
var favEventIds = ["abc", "123"];
const modifiedEvents = eventListSnapshot.docs.map(function (doc) {
const eventData = doc.data()
eventData.id = doc.id
eventData.is_favorite = favEventIds.includes(doc.id)
return eventData
})
对 Firestore return 在他们的 类 之类的东西感到厌倦。这是一个帮助器,如果你给它一个 db
和 collection
它会 return 该集合中的所有记录作为解析实际数组的承诺。
const docsArr = (db, collection) => {
return db
.collection(collection)
.get()
.then(snapshot => snapshot.docs.map(x => x.data()))
}
;(async () => {
const arr = await docsArr(myDb, myCollection)
console.log(arr)
})()
我发现使用 map 并获取文档 ID 的更好方法如下:
从我希望在您的构造函数中更新的对象数组开始:
this.state = {
allmystuffData: [
{id: null,LO_Name: "name", LO_Birthday: {seconds: 0, nanoseconds: 0},
LO_Gender: "Gender", LO_Avatar: "https://someimage", LO_Type: "xxxxx"},],
};
并在我的函数中执行以下操作
const profile = firebase
.firestore()
.collection("users")
.doc(user.uid)
.collection("stuff")
.get()
.then( async (querySnapshot) => {
console.log("number of stuff records for ",user.uid," record count is: ",
querySnapshot.size);
const profile = await Promise.all(querySnapshot.docs.map( async (doc) => {
const stuffData = doc.data()
stuffData.id = doc.id
condole.log("doc.id => ",doc.id)
return stuffData
}));
this.setState({allmystuffData: profile});
})
.catch(function (error) {
console.log("error getting stuff: ", error);
})
在这个例子中,我读取了集合中的所有文档,并在映射时使用了查询快照。 promise.all 确保在将其呈现到屏幕之前返回所有记录。我将文档 ID 添加到返回数组中每个对象的“id”元素,然后我使用 setstate 将我的状态数组替换为从查询返回的数组。
// https://firebase.google.com/docs/firestore/query-data/get-data
const querySnapshot = await db.collection("students").get();
// https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot?authuser=0#docs
querySnapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() }));
你可以试试这个
FirebaseFirestore.instance
.collection('Video_Requests')
.get()
.then((QuerySnapshot querySnapshot){querySnapshot.docs.forEach((doc){
print(doc.data());
});
});