在Node.js中使用MongoDB独有的ID

首先

Mongodb使用了一种称为_id的特殊ID。即使在使用Mongodb shell进行自定义时,也必须使用ObjectId()。无论如何,在MongoDB中,_id不是字符串类型,而是一种特殊的类型。由于在从node.js和其他程序中导出时引发了错误,所以我将对此进行解释。

版本

・Node.js      15.11.0
・MongoDB     4.4.6
・MongoDBドライバ 7.6.2

节点.js 15.11.0
MongoDB 4.4.6
MongoDB驱动 7.6.2

书籍

有时候,为了最小化数据,我们可能会像关系型数据库一样对数据进行规范化。但是,有时候会出现_id变成字符串类型的情况。在这种情况下,使用if语句进行评估可能不会得到true的结果。这时就可以使用下面介绍的方法。

转字符串()

//id1をObjectId
//id2をstringとします
id1 = id1.toString()
if(id1 == id2)console.log(true)
true

我会在以下给出一种中文的表述方式:
相反地,我也会介绍如何从字符串转换为ObjectId。

新的对象标识符()

var ObjectId = require('mongodb').ObjectId;
//id1をObjectId
//id2をstringとします
id2 = new ObjectId(id2);
if(id1 == id2)console.log(true);

是否是别名还是版本差异我不清楚,但我将介绍另一种模式的相同方法。因为不需要加上“new”,所以可能更喜欢这个方法。

ObjectID() 的中文翻译为 “对象标识符()”。

var ObjectId = require('mongodb').ObjectID;
//id1をObjectId
//id2をstringとします
id2 = ObjectID(id2);
if(id1 == id2)console.log(true);
true 

看到 “_id” 似乎是十六进制,所以我搜索了一下 JavaScript 中是否有类似的 toString 方法,但我还是认为这是 MongoDB 特有的东西。

id由Unix时间、机器ID、进程ID和计数器组成。因此,可以从id中获取Unix时间。

获取时间戳

var ObjectId = require('mongodb').ObjectID;
id = new ObjectId();
console.log(id.getTimestamp());

从这里开始无谓的延伸

在搜索其他关于id的有用属性时,我突然想到能不能尝试一下获取列表之类的功能。

var ObjectId = require('mongodb').ObjectID;
id = new ObjectId();
for(key in id){
 console.log(key);
}
_bsontype
id
toHexString
get_inc
getInc
generate
toString
toJSON
equals
getTimestamp
generationTime

原来如此,有这么多啊。
我会分别尝试一下。

_bsontype 的中文含义是什么。

var ObjectId = require('mongodb').ObjectID;
id = new ObjectId();
console.log(id._bsontype);
ObjectID

这是一个用于确认自身类型的属性吗?

使用中文将以下内容进行释义,只需要一种选择:

id

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.id);
<Buffer 61 1e 6b 37 71 77 f1 3e f8 ca bb a8>

它似乎可以在缓冲区中以十六进制进行显示。

转为十六进制字符串。

var ObjectId = require('mongodb').ObjectID;
id = new ObjectId();
console.log(id.toHexString());
console.log(typeof(id.toHexString()));
console.log(id.toString());
console.log(typeof(id.toString()));

结果一看就知道,因为我不太清楚它的形式,所以包括这个试验。

611e69f74b61853eb65d45c6
string
611e69f74b61853eb65d45c6
string

获取增量()

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.get_inc());
13228467

这是…到底是什么呢?
如果有人知道的话,请告诉我。

获得增加()

从观察来看,这是刚才的东西吗?

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.get_inc());
console.log(id.getInc());
12862848
12862849

这个应该是别名吧。

生成()

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.generate());
console.log(id.id);
<Buffer 61 1e 6d 52 77 18 86 3f 62 7e 27 ad>
<Buffer 61 1e 6d 52 77 18 86 3f 62 7e 27 ac>

这也可以说是id的别名吧。

转为JSON格式

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.toJSON());
console.log(typeof(id.toJSON()));
611e6de8a6cfd93f7fc2b096
string

这肯定是用于MongoDB数据库的东西,否则只用于_id是没有意义的。

相等

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.equals(null));
console.log(id.equals(id));

哎呀,如果有這個東西的話,一開始的流程就不必要了吧… 唉,嗯,這篇文章本來就是散文風格的。我打算之後好好整理一下的。

时间一代

var ObjectId = require('mongodb').ObjectID;
id = ObjectId();
console.log(id.getTimestamp());
console.log(id.generationTime);

考虑到它是写作“Time”,我以为它是一个别名,但似乎并不是这样。

2021-08-19T14:48:30.000Z
1629384510

结束

这都是因为没有考虑,随便开始写的缘故,所以变得散文化了。不过,因为也想自己整理一下,所以之后会写总结。拿下!

广告
将在 10 秒后关闭
bannerAds