【问题标题】:How to increase post id when a new document is inserted into firebase? [duplicate]将新文档插入firebase时如何增加帖子ID? [复制]
【发布时间】:2020-09-27 21:39:57
【问题描述】:

有没有办法为添加到数据库中的每个文档增加帖子 ID,以便我的数据看起来像这样。

第一次插入:

{
    "createdAt": "2020-09-27T21:35:12.276Z",
    "postId": "1",
    "body": "This is my first post",  
}

第二次插入:

{
    "createdAt": "2020-09-27T21:37:39.165Z",
    "postId": "2",
    "body": "This is my second post",  
}
exports.postOnePost = (req, res) => {
  if (req.body.body.trim() === "") {
    return res.status(400).json({ body: "Body must not be empty" });
  }

  const newPost = {
    createdAt: new Date().toISOString(),
    postId: ,
    body: req.body.body,
  };

  db.collection("posts")
    .add(newPost)
    .then((doc) => {
      console.log(doc.id)
    })
    .catch((err) => {
      res.status(500).json({ error: "something went wrong" });
      console.error(err);
    });
};

【问题讨论】:

  • 为什么需要这样做?这种策略不能很好地扩展(因为您的自动增量将难以在负载下保持最新)。简单地接受每个文档的随机标识符通常更合适。 add() 已经为您提供了该 ID。
  • 因为每个帖子都有自己的号码,我想在客户端显示这个号码。我正在为文档使用随机标识符,我只想存储一个在添加新帖子时自增的数字。

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


【解决方案1】:

将 ID 复制到文档中是一种反模式。

您应该让 Firestore 使用 .add 生成 ID,就像您正在做的那样,让它只是您的 文档密钥,而不是文档属性。

【讨论】:

  • 听起来复制 ID 并不是这个 OP 要求做的。要求是随着每次添加增加数字 ID。无论如何,在某些情况下实际上需要将 ID 复制到文档中,例如在您希望通过文档 ID 查询整个集合组的集合组查询中 - 如果不将 ID 复制到文档中,这是不可能的。
【解决方案2】:

在 cmets 你说:

我只想存储一个在添加新帖子时自增的数字。

这在 Firestore 中是不可能的。没有像某些 SQL 数据库中那样的自动增量字段。这是因为自动增量值不会按照 Firestore 要求的方式进行缩放。

如果您想要像这样增加值,您需要在其他地方跟踪该值,例如另一个文档或其他来源,并为您添加的每个文档复制更新后的数字。

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多