Node.js Mongoose.js string ke fungsi ObjectId

174

Apakah ada fungsi untuk mengubah string menjadi objectId di simpul menggunakan luwak? Skema ini menetapkan bahwa sesuatu adalah ObjectId, tetapi ketika disimpan dari sebuah string, mongo mengatakan kepada saya itu masih hanya sebuah string. _Id dari objek, misalnya, ditampilkan sebagai objectId("blah").

JRPete
sumber

Jawaban:

419

Anda dapat melakukannya seperti ini:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
Kevin Dente
sumber
Ya itu agak lebih bersih dalam hal ini. Mungkin hanya perlu menggunakan mongo.BSONPure jika melakukan fromTime ()
berbakatmones
3
Apakah ini menimbulkan kesalahan jika itu adalah string yang tidak valid? Mencari cara terbaik untuk melakukan validasi input dalam API REST untuk bidang mongo id.
Zambonilli
1
Tidak benar-benar menjawab pertanyaan karena menggunakan metodologi ini string akan dikonversi dan tidak sama dengan aslinya.
ed209
mongoose.Types.ObjectId (id) tetapi id saya tidak ditentukan lalu apa yang akan kembali? id atau kesalahan baru
Keval Bhatt
@KevinDente Saya menggunakan Nodejs dengan Typescript, saya sudah mencoba solusi Anda tetapi masih mendapatkan string dan permintaan saya tidak mengembalikan apa yang seharusnya dikembalikan. ada ide tentang bagaimana melakukannya pada naskah?
SOufiane Fadil
9

Anda dapat melakukannya seperti ini:

var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");

EDIT: Standar baru memiliki fromHexString daripada fromString

robot berbakat
sumber
1
Yah, bahkan lebih banyak lagi standar "baru" tampaknya adalah luwak.mongo.BSONSkin.ObjectID.createFromHexString () (pada
luaran 3.9.7
1
Bagi mereka yang mencoba melakukan ini, ini adalah jawaban yang jauh lebih baik daripada jawaban yang dipilih karena itu tidak akan mengubah id jika Anda sudah menggunakan id mongo.
ed209
1
Ini tidak lagi berfungsi, gunakan jawaban yang diterima sebagai gantinya
paper1111
BSONPure bukan bagian dari mongoose.mongosaya. Adakah yang bisa mengkonfirmasi?
Artur Tagisow
5

Menilai dari komentar, Anda mencari:

mongoose.mongo.BSONPure.ObjectID.isValid

Atau

mongoose.Types.ObjectId.isValid
DI
sumber
5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");
ditenagai uap
sumber
3
Bisakah Anda mengomentari perbedaan antara mongoose.Types.ObjectIddan mongoose.mongo.ObjectId? Properti objek luwak berbeda, tetapi mereka mungkin merujuk metode yang sama di bawahnya. Berikan komentar tentang metode yang mendasari pada Typesvs mongo.
steampowered
5

Saya tidak bisa menyelesaikan metode ini (memang saya tidak mencari terlalu lama)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Jika skema Anda mengharapkan properti bertipe ObjectId, konversi tersirat, setidaknya ini tampaknya menjadi kasus di 4.7.8.

Anda bisa menggunakan sesuatu seperti ini, yang memberikan sedikit lebih banyak fleksibilitas:

function toObjectId(ids) {

    if (ids.constructor === Array) {
        return ids.map(mongoose.Types.ObjectId);
    }

    return mongoose.Types.ObjectId(ids);
}
Billy Jake O'Connor
sumber
3

Anda dapat menggunakan ini juga

const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");

itu cara paling sederhana untuk melakukannya

Ash18
sumber
0

Lihat saja cuplikan kode di bawah ini jika Anda menerapkan REST API melalui express dan luoose. (Contoh untuk ADD)

....
exports.AddSomething = (req,res,next) =>{
  const newSomething = new SomeEntity({
 _id:new mongoose.Types.ObjectId(), //its very own ID
  somethingName:req.body.somethingName,
  theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...

Semoga Membantu

Manoj Kumar
sumber