如何使用mongoose生成一个ObjectId?

213

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

  • 这个问题是关于从头开始生成一个全新的,唯一的ObjectId

  • 另一个问题是关于从现有的字符串表示创建一个ObjectId。在这种情况下,您已经有一个字符串表示的ID,它可能是唯一的,也可能不是,然后您将其解析为ObjectId

5个回答

431
您可以在require('mongoose').Types中找到ObjectId构造函数。以下是一个示例:
var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId();

id是新生成的ObjectId


注意:正如Joshua Sherman所指出的那样,在 Mongoose 6 中,您必须使用 new 前缀调用该方法:

var id = new mongoose.Types.ObjectId();
你可以在Mongoose#Types文档中阅读有关 Types 对象的更多信息。

4
你如何确定这确实是独一无二的?Mongoose 在之前有做任何检查吗? - R01010010
1
@R01010010 看看这些是如何生成的(谷歌)。没有检查,但它是概率性的。 - Dmitry Minkovsky
25
如果在同一台机器上的一秒钟内生成了16777216,那么你很可能会得到一个重复值。 :) - joeytwiddle
3
更正:如果您在同一台机器上在一毫秒内生成了16777216,则可能会得到重复。 - Evading Shadows
8
看起来在 mongoose 6 中,您需要添加新的 new mongoose.Types.ObjectId() - Joshua Sherman
显示剩余3条评论

66

你可以使用mongoose这样创建一个新的MongoDB ObjectId

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();

33

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

经过查看mongodb源代码后,我发现他们使用npm的bson库来生成ObjectIDs。

如果你只需要生成一个ObjectID而不想安装整个mongodb/mongoose包,你可以导入更轻量级的bson库:

const bson = require('bson');
new bson.ObjectId(); // 5cabe64dcf0d4447fa60f5e2
注意:还有一个名为 bson-objectid 的npm项目,它甚至更轻。

29

使用 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');

2
mongoose.Type 和 mongoose.Schema.Types 有什么区别? - MartianMartian
当您想在模式之间引用时,将使用mongoose.Schema.Types。要在代码中创建单个objectId,只需使用mongoose.Types即可。 - stefano
@stefano,mongoose.Schema.Types.ObjectId和mongoose.Types.ObjectId是完全相同的。 - Normal

1

从mongoose导入mongo,使用node-mongodb-native驱动程序。如果您打开包,可以进行验证!

import { mongo } from 'mongoose'
const newId = new mongo.ObjectId()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接