有没有办法在没有mongodb的情况下创建像_id字符串这样的mongodb?

fan*_*ncy 20 javascript database couchdb mongodb node.js

我非常喜欢mongodb生成的_ids的格式.主要是因为我可以从客户端提取数据,如日期.我打算使用另一个数据库,但仍然希望我的文档类型为_id.如何在不使用mongodb的情况下创建这些ID?

谢谢!

Rub*_*olk 32

javascript中一个非常简单的伪ObjectId生成器:

const ObjectId = (m = Math, d = Date, h = 16, s = s => m.floor(s).toString(h)) =>
    s(d.now() / 1000) + ' '.repeat(h).replace(/./g, () => s(m.random() * h))
Run Code Online (Sandbox Code Playgroud)


pau*_*kow 20

对象ID通常由客户端生成,因此任何MongoDB驱动程序都有代码来生成它们.

如果您正在寻找JavaScript,请参阅MongoDB Node.js驱动程序中的一些代码:

https://github.com/mongodb/js-bson/blob/1.0-branch/lib/bson/objectid.js

另一个更简单的解决方案:

https://github.com/justaprogrammer/ObjectId.js

  • 看起来 js 文件已被移动:https://github.com/mongodb/js-bson/blob/1.0-branch/lib/bson/objectid.js (3认同)

dip*_*ent 18

我有一个生成ObjectIds 的浏览器客户端.我想确保ObjectId在客户端中使用与服务器中使用的算法相同的算法.MongoDB有js-bson可以用来实现它.

如果你使用javascript与节点.

npm install --save bson

使用require语句

var ObjectID = require('bson').ObjectID;

var id  = new ObjectID();
console.log(id.toString());
Run Code Online (Sandbox Code Playgroud)

使用ES6 import语句

import { ObjectID } from 'bson';

const id  = new ObjectID();
console.log(id.toString());
Run Code Online (Sandbox Code Playgroud)

该库还允许您使用好的旧脚本标签导入,但我还没有尝试过.

11/2018更新

我刚刚尝试将软件包升级到bson 4.0,并且软件包引发了错误.

  • 这应该是正确的答案...使用与 MongoDB 相同的代码!我正在使用 bson 4.0.2,它对我来说工作得很好。请注意,名称是“ObjectId”(小写 D) (3认同)
  • 我使用 id.toHexString() 来获取字符串。 (2认同)

Gra*_*hew 5

以更易读的语法(KISS)扩展Rubin Stolk和ChrisV的答案。

function objectId () {
  return hex(Date.now() / 1000) +
    ' '.repeat(16).replace(/./g, () => hex(Math.random() * 16))
}

function hex (value) {
  return Math.floor(value).toString(16)
}

export default objectId
Run Code Online (Sandbox Code Playgroud)


小智 5

这是一个生成新 objectId 的简单函数

newObjectId() {
    const timestamp = Math.floor(new Date().getTime() / 1000).toString(16);
    const objectId = timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {
        return Math.floor(Math.random() * 16).toString(16);
    }).toLowerCase();

    return objectId;
}
Run Code Online (Sandbox Code Playgroud)