我非常喜欢mongodb生成的_id的格式。主要是因为我可以从客户端提取日期之类的数据。我打算使用另一个数据库,但我的文档仍然需要这种类型的_id。如果不使用mongodb,我该如何创建这些id呢?谢谢你!
sycxhyv71#
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))
qlvxas9a2#
在客户端使用官方MongoDB BSON库
我有一个生成ObjectId的浏览器客户端。我想确保我在客户端中使用的ObjectId算法与服务器中使用的相同。MongoDB有js-bson,可以用来实现这一点。如果您使用javascript搭配节点。npm install --save bson
ObjectId
npm install --save bson
使用require语句
var ObjectID = require('bson').ObjectID; var id = new ObjectID(); console.log(id.toString());
使用ES6导入语句
import { ObjectID } from 'bson'; const id = new ObjectID(); console.log(id.toString());
该库还允许您使用良好的旧脚本标记导入,但我还没有尝试过这一点。
oxosxuxt3#
对象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
ffdz8vbo4#
以更易读的语法(KISS)扩展了鲁宾·斯托克和克里斯·V的答案。
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
pexxcrt25#
鲁本-斯托克的回答是伟大的,但故意不透明?非常稍微容易挑刺的是:
const ObjectId = (rnd = r16 => Math.floor(r16).toString(16)) => rnd(Date.now()/1000) + ' '.repeat(16).replace(/./g, () => rnd(Math.random()*16));
(实际上在略少的字符)。荣誉虽然!
osh3o9ms6#
这是一个用于生成新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; }
qpgpyjmq7#
这里有a link!到一个库来做这件事。https://www.npmjs.com/package/mongo-object-reader您可以读写十六进制字符串。
const { createObjectID, readObjectID,isValidObjectID } = require('mongo-object-reader'); //Creates a new immutable `ObjectID` instance based on the current system time. const ObjectID = createObjectID() //a valid 24 character `ObjectID` hex string. //returns boolean // input - a valid 24 character `ObjectID` hex string. const isValid = isValidObjectID(ObjectID) //returns an object with data // input - a valid 24 character `ObjectID` hex string. const objectData = readObjectID(ObjectID) console.log(ObjectID) //ObjectID console.log(isValid) // true console.log(objectData) /* { ObjectID: '5e92d4be2ced3f58d92187f5', timeStamp: { hex: '5e92d4be', value: 1586681022, createDate: 1970-01-19T08:44:41.022Z }, random: { hex: '2ced3f58d9', value: 192958912729 }, incrementValue: { hex: '2187f5', value: 2197493 } } */
8wtpewkr8#
这里有详细的说明http://www.mongodb.org/display/DOCS/Object+IDs您可以使用它来滚动自己的id字符串
8条答案
按热度按时间sycxhyv71#
JavaScript中一个非常简单的伪ObjectId生成器:
qlvxas9a2#
在客户端使用官方MongoDB BSON库
我有一个生成
ObjectId
的浏览器客户端。我想确保我在客户端中使用的ObjectId
算法与服务器中使用的相同。MongoDB有js-bson,可以用来实现这一点。如果您使用javascript搭配节点。
npm install --save bson
使用require语句
使用ES6导入语句
该库还允许您使用良好的旧脚本标记导入,但我还没有尝试过这一点。
oxosxuxt3#
对象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
ffdz8vbo4#
以更易读的语法(KISS)扩展了鲁宾·斯托克和克里斯·V的答案。
pexxcrt25#
鲁本-斯托克的回答是伟大的,但故意不透明?非常稍微容易挑刺的是:
(实际上在略少的字符)。荣誉虽然!
osh3o9ms6#
这是一个用于生成新objectId的简单函数
qpgpyjmq7#
这里有a link!到一个库来做这件事。
https://www.npmjs.com/package/mongo-object-reader您可以读写十六进制字符串。
8wtpewkr8#
这里有详细的说明
http://www.mongodb.org/display/DOCS/Object+IDs
您可以使用它来滚动自己的id字符串