【问题标题】:Incrementing index in mongo dbMongoDB中的递增索引
【发布时间】:2019-01-22 19:09:04
【问题描述】:

在 mongo db 中添加一个名为 date 的字段时,我可以这样做:

date: {
    type: Date,
    default: Date.now
}

它会在创建时自动将date 字段添加到我的新集合中。有什么方法可以将自增索引 (id) 添加到我的收藏中吗?

注意:我尝试在客户端执行此操作,但是每次我使用 (id) 字段推送集合时,它都会从集合中删除并替换为 _id,即带有随机字符的长字符串。很长!

寻找每一个提示。

编辑:负责向 db 添加使用的代码

app.post("/users", function (req, res) {
    createUser(req.body, function (err, user) {
        if (err) {
            return res.json(err);
        }
        return res.json(user);
    });
});

【问题讨论】:

  • 我也会投票支持使用 ObjectId - 这是一个具有很多好处的至高无上的概念。为了帮助您解决问题,我需要查看用于将对象写入 MongoDB 的代码。
  • @dnickless 我更新了我的帖子 :)
  • req.body 中有什么内容?
  • @dnickless 用户信息(只是一个表单值)
  • 我只是问,因为驱动程序不应该简单地覆盖您的“_id”字段如果您提供正确。

标签: javascript node.js mongodb


【解决方案1】:

MongoDB 自动为数据库中的每个对象创建唯一的 id,从而使每个条目都有一个唯一的 _id 字段,即ObjectId。您真的不需要担心指定自定义 ID。

如果您希望对象大致按创建顺序排列,您可以按 _id 排序,或者您可以添加一个在创建时设置的日期字段并按此排序。

除此之外,我不确定通过自动递增 id 会获得什么

【讨论】:

  • 但我不想在路径中使用那个长ID。我正在使用路径:/user/:id。如果我使用它会很荒谬,它会产生一个链接:mydomain.com/user/13k4r3f329d3dk。看起来很奇怪,对吧?但如果它是从 0 递增的东西,则为mydomain.com/user/1。看起来更好,对吧?
  • @Patrickkx:“看起来更好,对吧?” - 你不会手动输入这些网址(或记住它们),所以不清楚你为什么会太在意这个? ¯\_(ツ)_/¯ 有些浏览器甚至不会显示地址的那部分。另外,mongodb 有一个很好的理由使用 ObjectId 作为默认 id 类型:在分布式数据库中维护自增序列非常困难。
【解决方案2】:

有多种方法可以实现自增索引,但这不是一种好的做法。

详细信息在这里:Auto increment in MongoDB to store sequence of Unique User ID

查看 Rizwan Siddiquee 的回答,了解如何使用存储的 javascript 函数实现它。

另一种方法是使用任何类型的 ODM 在应用程序层实现它,但这显然是危险的,对于严肃的应用程序来说并不那么可信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2021-06-19
    • 2011-09-13
    • 2016-03-14
    • 2018-07-03
    • 2021-09-30
    相关资源
    最近更新 更多