我想从集合中获取所有文档,然后与它们一起获取ID。 这是我的收藏user collection 这只是一个包含多个文档的集合。 我尝试了一下,但是没有用:
let userRef = admin.firestore().collection('users');
return userRef.get().then(querySnapshot => {
let docs = querySnapshot.docs;
for (let doc of docs) {
console.log(doc.id);
}
return true;
});
更新
我真正想做的是获取父集合的所有文档ID,以便我可以使用它们在每个包含子集合的文档中进行迭代。
因此,当我在此处为用户集合工作的人做同样的事情时,在这种情况下,父集合具有包含子集合的文档ID,则它不起作用。就像我的收藏中没有文件。
let savedRef = await admin.firestore().collection('saved');
return savedRef.get().then(querySnapshot => {
console.log(querySnapshot);
let docs = querySnapshot.docs;
for (let doc of docs) {
console.log(doc.id);
}
return true;
});
saved collection which contain documents with a subcollection
你知道为什么吗? 谢谢
答案 0 :(得分:3)
是的,querySnapshot
本身可以很容易地迭代并获得您想要的。通常,这就是我迭代Firestore查询快照的方式:
//I like to separate DB instance for re-utilization
var db = admin.firestore()
//Also a good practice to separate reference instance
var usersReference = db.collection("users");
//Get them
usersReference.get().then((querySnapshot) => {
//querySnapshot is "iteratable" itself
querySnapshot.forEach((userDoc) => {
//userDoc contains all metadata of Firestore object, such as reference and id
console.log(userDoc.id)
//If you want to get doc data
var userDocData = userDoc.data()
console.dir(userDocData)
})
})
答案 1 :(得分:0)
为了遍历特定文档中的子集合元素,您可以执行以下操作:
db.collection("ParentCollection").doc("DocumentID").collection("SubCollection").get()
.then((querySnapshot) => {
...
});
});
如果要遍历所有父集合的所有子集合,则可以执行以下操作:
db.collection("ParentCollection").get().then((querySnapshot) => {
querySnapshot.forEach((document) => {
document.ref.collection("SubCollection").get().then((querySnapshot) => {
...
});
});
});
编辑: 添加对我有用的确切代码示例:
const app = express();
const Firestore = require('@google-cloud/firestore');
const db = new Firestore({
projectId: 'my-project-id',
keyFilename: '/path/to/service/account/key/file.json',
});
app.get('/', async (req, res) => {
db.collection("ParentCollection").get().then((querySnapshot) => {
// console.log(querySnapshot)
querySnapshot.forEach((document) => {
document.ref.collection("SubCollection").get().then((querySnapshot) => {
console.log(querySnapshot)
querySnapshot.forEach((document) => {
console.log(document.id, '=>', document.data());
});
});
});
});
res
.status(200)
.send('Hello, world!\n')
.end();
});