ฉันจะสร้าง ObjectId ด้วยพังพอนได้อย่างไร


133

ฉันต้องการสร้าง MongoDB ObjectIdด้วย Mongoose มีวิธีเข้าถึงตัวObjectIdสร้างจากพังพอนหรือไม่?

  • คำถามนี้เกี่ยวกับการสร้างสิ่งใหม่ ObjectIdตั้งแต่ต้น รหัสที่สร้างขึ้นเป็นรหัสใหม่ที่ไม่ซ้ำกันในระดับสากล

  • อีกคำถามหนึ่งถามเกี่ยวกับการสร้างObjectIdจากการแสดงสตริงที่มีอยู่ ในกรณีนี้คุณมีการแสดง ID เป็นสตริงอยู่แล้วซึ่งอาจเป็นหรือไม่ซ้ำกันในระดับสากลก็ได้และคุณกำลังแยกวิเคราะห์เป็นObjectIdไฟล์.

คำตอบ:


291

คุณสามารถค้นหาคอนสตรัคบนObjectId require('mongoose').Typesนี่คือตัวอย่าง:

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

idเป็นไฟล์ObjectId.

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับTypesวัตถุที่พังพอนเอกสาร # ประเภท


4
คุณจะแน่ใจได้อย่างไรว่าสิ่งนี้ไม่เหมือนใคร พังพอนตรวจสอบก่อนหรือไม่?
R01010010

1
@ R01010010 ตรวจสอบวิธีสร้างสิ่งเหล่านี้ (Google) ไม่มีการตรวจสอบ แต่น่าจะเป็นไปได้
Dmitry Minkovsky

13
หากคุณสร้าง 16777216 ภายในหนึ่งวินาทีบนเครื่องเดียวกันคุณอาจจะได้รับข้อมูลซ้ำ :)
joeytwiddle

การแก้ไข: หากคุณสร้าง 16777216 ภายในหนึ่งมิลลิวินาทีบนเครื่องเดียวกันคุณอาจจะได้รับข้อมูลซ้ำ 😁
Shadows

43

คุณสามารถสร้าง MongoDB ใหม่ObjectIdเช่นนี้โดยใช้ mongoose:

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

14

ฉันต้องการสร้างรหัส mongodb ในฝั่งไคลเอ็นต์

หลังจากขุดลงในซอร์สโค้ด mongodb ฉันพบว่าพวกเขาสร้าง ObjectIDs โดยใช้ npm bsonlib

หากคุณต้องการเพียงสร้าง ObjectID โดยไม่ต้องติดตั้งแพ็คเกจ mongodb / mongoose ทั้งหมดคุณสามารถนำเข้าbsonไลบรารีไฟแช็ก:

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

หมายเหตุ: นอกจากนี้ยังมีโปรเจ็กต์ npm ที่มีชื่อว่าbson-objectidเบากว่า


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');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.