Bagaimana saya bisa menghasilkan ObjectId dengan luwak?

133

Saya ingin menghasilkan MongoDB ObjectIddengan Mongoose. Apakah ada cara untuk mengakses ObjectIdkonstruktor dari Mongoose?

  • Pertanyaan ini adalah tentang membuat yang baru ObjectId dari awal. ID yang dihasilkan adalah ID unik universal baru.

  • Pertanyaan lain bertanya tentang menciptakan ObjectIddari representasi string yang ada . Dalam hal ini, Anda sudah memiliki representasi string dari ID — itu mungkin atau mungkin tidak unik secara universal — dan Anda menguraikannya menjadi ObjectId.

Dmitry Minkovsky
sumber

Jawaban:

291

Anda dapat menemukan ObjectIdkonstruktornya di require('mongoose').Types. Berikut ini sebuah contoh:

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

idadalah yang baru dibuat ObjectId.

Anda dapat membaca lebih lanjut tentang Typesobjek di dokumentasi # Jenis Mongoose .

Dmitry Minkovsky
sumber
4
bagaimana Anda bisa yakin ini benar-benar unik? apakah ada cek sebelumnya?
R01010010
1
@ R01010010 lihat bagaimana ini dihasilkan (Google). Tidak ada cek tetapi probabilistik
Dmitry Minkovsky
13
Jika Anda menghasilkan 16777216 dalam satu detik di mesin yang sama, maka Anda mungkin akan mendapatkan duplikat. :)
joeytwiddle
Koreksi: Jika Anda menghasilkan 16777216 dalam satu milidetik pada mesin yang sama, maka Anda mungkin akan mendapatkan duplikat. 😁
Evading Shadows
43

Anda dapat membuat MongoDB baru ObjectIdseperti ini menggunakan luwak:

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();
ditenagai uap
sumber
14

Saya perlu membuat id mongodb di sisi klien.

Setelah menggali ke dalam kode sumber mongodb saya menemukan mereka menghasilkan ObjectID menggunakan npm bsonlib.

Jika Anda hanya perlu membuat ObjectID tanpa menginstal seluruh paket mongodb / luwak, Anda dapat mengimpor bsonperpustakaan yang lebih ringan :

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

Catatan: Ada juga proyek npm yang dinamai bson-objectidlebih ringan

Poyoman
sumber
6

Dengan sintaks 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');
MattCochrane
sumber