我试图从我的数据库集合“posts”中获取所有文档,但我得到的是一个空数组。
奇怪的是,我能够从另一个名为“users”的集合中获取所有文档,该集合具有相同的结构并使用完全相同的代码。
我花了几天时间寻找答案,但一直找不到解决方案。
这是请求:
const db = admin.firestore();
exports.getAllPosts = (req, res) => {
db.collection('posts')
.orderBy('createdAt', 'desc')
.get()
.then(snapshot => {
let posts = [];
snapshot.forEach((doc) => {
posts.push({
id: doc.id,
body: doc.data().body,
author: doc.data().author,
createdAt: doc.data().timestamp,
voteScore: doc.data().voteScore
});
});
return res.json(posts);
})
.catch(err => {
console.error(err);
res.status(500).json({ error: err.code });
});
}
这是响应:
[]
这就是我当前的收藏: Posts collection screenshot
这是我返回“快照”时得到的响应:
{
"_query": {
"_firestore": {
"_settings": {
"projectId": "readable-bf7a6",
"firebaseVersion": "9.6.0",
"libName": "gccl",
"libVersion": "4.10.0 fire/9.6.0"
},
"_settingsFrozen": true,
"_serializer": {
"allowUndefined": false
},
"_projectId": "readable-bf7a6",
"registeredListenersCount": 0,
"bulkWritersCount": 0,
"_backoffSettings": {
"initialDelayMs": 100,
"maxDelayMs": 60000,
"backoffFactor": 1.3
},
"_clientPool": {
"concurrentOperationLimit": 100,
"maxIdleClients": 1,
"activeClients": {},
"failedClients": {},
"terminated": false,
"terminateDeferred": {
"promise": {}
}
}
},
"_queryOptions": {
"parentPath": {
"segments": []
},
"collectionId": "posts",
"converter": {},
"allDescendants": false,
"fieldFilters": [],
"fieldOrders": [
{
"field": {
"segments": [
"createdAt"
]
},
"direction": "DESCENDING"
}
],
"kindless": false
},
"_serializer": {
"allowUndefined": false
},
"_allowUndefined": false
},
"_readTime": {
"_seconds": 1622395245,
"_nanoseconds": 513743000
},
"_size": 0,
"_materializedDocs": null,
"_materializedChanges": null
}
注意集合“users”的请求如何成功运行:
const db = admin.firestore();
exports.getAllUsers = (req, res) => {
db.collection('users')
.orderBy('createdAt', 'desc')
.get()
.then(snapshot => {
let users = [];
snapshot.forEach((doc) => {
let users = [];
snapshot.forEach((doc) => {
users.push({
id: doc.data().userId,
email: doc.data().email,
handle: doc.data().handle
});
});
return res.json(users);
})
.catch(err => {
console.error(err);
res.status(500).json({ error: err.code });
});
}
响应:
[
{
"id": "EPoHBxhQFUXbcL3TCVx1LdUG2nO2",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5f2d2a3d3a311f38323e3633713c3032" rel="noreferrer noopener nofollow">[email protected]</a>"
},
{
"id": "RqEa3dEq8TSDcZYeolXafju67rB2",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b8cdcbddca8988f8dfd5d9d1d496dbd7d5" rel="noreferrer noopener nofollow">[email protected]</a>"
},
{
"id": "dxveb4n2iMQej5Q14uprsKRxFp23",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c0b5b3a5b2f480a7ada1a9aceea3afad" rel="noreferrer noopener nofollow">[email protected]</a>",
"handle": "user4"
},
{
"id": "YQPzBPcsqlVZk9iJEuZTHKUNuVG2",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="eb9e988e99d9ab8c868a8287c5888486" rel="noreferrer noopener nofollow">[email protected]</a>",
"handle": "user2"
},
{
"id": "CZ05BJxi3TUOpIrmBaz539OWlbC3",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a6f697f685a7d777b737634797577" rel="noreferrer noopener nofollow">[email protected]</a>",
"handle": "user"
},
{
"id": "t0t83BVwt4gVgJkDv7HL1r1MaKr1",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="74010711063e1b071146341319151d185a171b19" rel="noreferrer noopener nofollow">[email protected]</a>",
"handle": "Jose"
}
]
Firebase 中的用户集合如下所示: Users collection screenshot
为什么一个集合会失败,而另一个集合工作正常并且我使用相同的代码?我在这里缺少什么?
提前致谢,希望我已经说得尽可能清楚了。如果您需要我提供其他任何信息,请告诉我。
最佳答案
非常简单,我的 friend ,你的 posts
文档不能这样排序:
.orderBy('createdAt', 'desc')
由于帖子文档没有 createdAt
属性,但它们有 timestamp
属性,因此您应该使用该属性来对帖子进行排序,如下所示:
.orderBy('timestamp', 'desc')
希望对您有帮助👍
关于node.js - 尝试获取所有文档时,Firebase 数据库集合返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67764035/