我真的很喜欢 mongodb 生成的 _ids 的格式。主要是因为我可以从客户端提取日期等数据。我打算使用另一个数据库,但我的文档仍然需要那种类型的 _id。如何在不使用 mongodb 的情况下创建这些 id?
谢谢!
我真的很喜欢 mongodb 生成的 _ids 的格式。主要是因为我可以从客户端提取日期等数据。我打算使用另一个数据库,但我的文档仍然需要那种类型的 _id。如何在不使用 mongodb 的情况下创建这些 id?
谢谢!
一个非常简单的 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))
我有一个生成ObjectId
s 的浏览器客户端。我想确保ObjectId
在客户端使用与服务器中使用的算法相同的算法。MongoDB 有js-bson可以用来完成这个任务。
如果您使用带有节点的 JavaScript。
npm install --save bson
使用要求语句
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());
该库还允许您使用良好的旧脚本标签进行导入,但我没有尝试过。
对象 ID 通常由客户端生成,因此任何 MongoDB 驱动程序都会有代码来生成它们。
如果您正在寻找 JavaScript,这里有一些来自 MongoDB Node.js 驱动程序的代码:
https://github.com/mongodb/js-bson/blob/1.0-branch/lib/bson/objectid.js
另一个更简单的解决方案:
以更易读的语法 (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
ruben-stolk 的回答很好,但故意不透明?稍微容易区分的是:
const ObjectId = (rnd = r16 => Math.floor(r16).toString(16)) =>
rnd(Date.now()/1000) + ' '.repeat(16).replace(/./g, () => rnd(Math.random()*16));
(实际上字符略少)。还是赞一个!
这是一个生成新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;
}
这是一个链接!到图书馆来做这件事。
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 } } */