向 firestore 数据库请求引用类型字段不起作用

问题描述 投票:0回答:1

我有以下获取请求的代码:

app.get('/getPetByOwner', async (req, res) => {
  try {
    const { ownerId } = req.query;

    if (!ownerId) {
      return res.status(400).json({ error: 'OwnerId is required in the query parameters.' });
    }
    const mascotasCollection = await admin.firestore().collection('pets').where('owner', '==', ownerId).get();
    
    if(mascotasCollection.empty) return res.status(404).json({error:"pets not found for the provided user"});
    
    const mascotasData = [];

    mascotasCollection.forEach((doc) => {
      mascotasData.push({
        id: doc.id,
        ...doc.data(),
      });
    });

    res.status(200).json(mascotasData);
  } catch (error) {
    console.error('Error in getMascotasByOwner:', error);
    res.status(500).json({ error: 'Internal server error.' });
  }
});

但它总是返回 404,即使提供带有宠物的现有用户 ID 也是如此。 数据库的结构是这样的: enter image description here

我尝试过不同的用户,但都不起作用。邮递员的请求是这样的: enter image description here

firebase express google-cloud-firestore postman backend
1个回答
0
投票

在您的屏幕截图中,我们可以看到

ownerId
字段的值为
/users/1
,因此使用值为
.where('owner', '==', ownerId)
1
进行查询无法工作。

问题的解决方案取决于 owner 字段的

Firestore 数据类型

所有者字段的数据类型为字符串:

ownerId
需要具有字符串值
/users/1

所有者字段的数据类型参考:

ownerId
需要定义为文档参考,如下:

const ownerId = admin.firestore()
   .collection('users')
   .doc('1');

const mascotasCollection = await admin.firestore().collection('pets').where('owner', '==', ownerId).get();
© www.soinside.com 2019 - 2024. All rights reserved.