如何用猫鼬生成ObjectId?


132

我想ObjectId用Mongoose 生成一个MongoDB 。有没有办法ObjectId从Mongoose 访问构造函数?

  • 这个问题是关于从头开始产生新的 ObjectId。生成的ID是全新的通用唯一ID。

  • 另一个问题是关于ObjectId现有的字符串表示形式创建一个。在这种情况下,您已经具有ID的字符串表示形式(它可能是通用的也可能不是唯一的),并且正在将其解析为ObjectId

Answers:


290

您可以在找到ObjectId构造函数require('mongoose').Types。这是一个例子:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId();

id是一个新生成的ObjectId

您可以TypesMongoose#Types文档中阅读有关该对象的更多信息。


4
您如何确定这确实是独一无二的?猫鼬以前有检查吗?
R01010010

1
@ R01010010看看它们是如何生成的(Google)。没有检查,但是有概率
Dmitry Minkovsky

13
如果您在一秒钟内在同一台计算机上生成16777216,则可能会得到一个副本。:)
joeytwiddle

更正:如果您在一毫秒内在同一台计算机上生成16777216,则可能会得到一个副本。😁
偷税阴影

43

您可以ObjectId使用mongoose 创建一个新的MongoDB :

var mongoose = require('mongoose');
var newId = new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca');
// or leave the id string blank to generate an id with a new hex identifier
var newId2 = new mongoose.mongo.ObjectId();

13

我需要在客户端生成mongodb id。

深入研究mongodb源代码后,我发现它们使用npm bsonlib 生成ObjectID 。

如果您只需要生成ObjectID而不安装整个mongodb / mongoose软件包,则可以导入lighter bson库:

const bson = require('bson');
new bson.ObjectId(); // 5cabe64dcf0d4447fa60f5e2

注意:还有一个名为npm bson-objectid更轻的npm项目


6

使用ES6语法

import mongoose from "mongoose";

// Generate a new new ObjectId
const newId2 = new mongoose.Types.ObjectId();
// Convert string to ObjectId
const newId = new mongoose.Types.ObjectId('56cb91bdc3464f14678934ca');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.