【问题标题】:Firebase database collection returns empty array when trying to get all documents尝试获取所有文档时,Firebase 数据库集合返回空数组
【发布时间】:2021-05-30 17:31:39
【问题描述】:

我正在尝试从我的数据库集合“帖子”中获取所有文档,但我得到的是一个空数组。

奇怪的是,我能够从另一个名为“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
}

注意集合“用户”的请求如何成功运行:

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": "ruben@gmail.com"
},
{
    "id": "RqEa3dEq8TSDcZYeolXafju67rB2",
    "email": "user10@gmail.com"
},
{
    "id": "dxveb4n2iMQej5Q14uprsKRxFp23",
    "email": "user4@gmail.com",
    "handle": "user4"
},
{
    "id": "YQPzBPcsqlVZk9iJEuZTHKUNuVG2",
    "email": "user2@gmail.com",
    "handle": "user2"
},
{
    "id": "CZ05BJxi3TUOpIrmBaz539OWlbC3",
    "email": "user@gmail.com",
    "handle": "user"
},
{
    "id": "t0t83BVwt4gVgJkDv7HL1r1MaKr1",
    "email": "userJose2@gmail.com",
    "handle": "Jose"
}
]

这是用户集合在 Firebase 中的样子: Users collection screenshot

为什么一个集合在另一个工作正常而我使用相同的代码时却失败了?我在这里错过了什么?

在此先感谢,我希望我已经尽可能清楚地说明了这一点。如果您需要我提供任何其他信息,请告诉我。

【问题讨论】:

    标签: node.js firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    很简单我的朋友,你的posts文件不能这样订购:

    .orderBy('createdAt', 'desc')
    

    因为帖子文档没有createdAt 属性,但它们有timestamp 属性,您应该使用该属性来为您的帖子排序:

    .orderBy('timestamp', 'desc')
    

    希望对你有帮助?

    【讨论】:

    • 我不敢相信我错过了...非常感谢肖恩!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2020-10-15
    • 1970-01-01
    • 2020-08-15
    • 2021-05-27
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多