Node.js Mongoose.js dizesi, ObjectId işlevine


174

Mongoose kullanarak bir dizgiyi düğümde bir objectId'e dönüştürmek için bir işlev var mı? Şema, bir şeyin ObjectId olduğunu belirtir, ancak bir dizeden kaydedildiğinde, mongo bana bunun hala sadece bir dize olduğunu söyler. Örneğin, nesnenin _id değeri olarak görüntülenir objectId("blah").

Yanıtlar:


419

Bunu şöyle yapabilirsiniz:

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

Evet, bu durumda biraz daha temiz. FromTime () yapıyorsa sadece mongo.BSONPure kullanmanız gerekebilir
talentedmrjones

3
Geçersiz bir dize ise bu hata veriyor mu? Mongo id alanları için bir REST API'sinde giriş doğrulaması yapmanın en iyi yolunu arıyorum.
Zambonilli

1
Bu metodolojiyi kullanarak dize dönüştürülecek ve orijinalle aynı olmayacak çünkü soruya gerçekten cevap vermiyor.
ed209

mongoose.Types.ObjectId (id) ama kimliğim tanımsızsa ne döndürecek? yeni id veya hata
Keval Bhatt

@KevinDente Typescript ile Nodejs kullanıyorum, çözümünüzü denedim ama hala bir dize alıyorum ve sorgum ne döndürmesi gerektiğini döndürmüyor. daktiloda nasıl yapılacağı hakkında herhangi bir fikir?
Soufiane Fadil

9

Bunu şu şekilde yapabilirsiniz:

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

EDIT: Yeni standart ,String yerine fromHexString'e sahip


1
Eh, daha da "yeni" standart mongoose.mongo.BSONPure.ObjectID.createFromHexString () (mongoose 3.9.7 itibariyle) gibi görünüyor
Evereq

1
Bunu yapmaya çalışanlar için, bu seçilen cevaptan çok daha iyi bir cevaptır, çünkü zaten bir mongo kimliği kullanıyorsanız kimliği dönüştürmeyecektir.
ed209

1
Bu artık işe
yaramıyor,

BSONPure mongoose.mongobenim bir parçası değil . Herkes onaylayabilir mi?
Artur Tagisow

5

Yorumlardan yola çıkarak şunları arıyorsunuz:

mongoose.mongo.BSONPure.ObjectID.isValid

Veya

mongoose.Types.ObjectId.isValid

5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");

3
Eğer arasındaki fark üzerinde yorum Could mongoose.Types.ObjectIdve mongoose.mongo.ObjectId? Firavun faresinin nesne özellikleri farklıdır, ancak altındaki aynı yönteme atıfta bulunabilirler. Üzerinde yatan yöntemlere konusunda yorum yapın Typesvs mongo.
steampowered

5

Bu yöntemi çözemedim (kuşkusuz uzun süre arama yapmadım)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Şemanız özelliğin ObjectId türünde olmasını beklerse, dönüşüm örtüktür, en azından 4.7.8'de olduğu gibi görünüyor.

Ancak bunun gibi bir şey kullanabilirsiniz, bu da biraz daha esnek olur:

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

Bunu da kullanabilirsiniz

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

bunu yapmanın en basit yolu


0

Express ve mongoose yoluyla bir REST API uyguluyorsanız aşağıdaki kod snippet'ine bakın. (EKLE örneği)

....
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
})
}
...

Umarım yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.