Node.js Mongoose.js文字列からObjectId関数


174

mongooseを使用してノードの文字列をobjectIdに変換する関数はありますか?スキーマは、何かがObjectIdであることを指定しますが、それが文字列から保存されると、mongoはそれがまだ単なる文字列であることを通知します。たとえば、オブジェクトの_idはと表示されobjectId("blah")ます。

回答:


419

あなたはそうすることができます:

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

ええ、この場合は少しすっきりします。fromTime()を実行する場合にのみmongo.BSONPureを使用する必要があるかもしれません
才能ある

3
無効な文字列の場合、エラーが発生しますか?mongo idフィールドのREST APIで入力検証を行う最良の方法を探しています。
サンボニーリ2014

1
この方法論を使用すると文字列が変換され、元の文字列と同じにならないため、実際には質問に答えません。
ed209、2015年

mongoose.Types.ObjectId(id)が私のidが定義されていない場合、何が返されますか?新しいIDまたはエラー
Keval Bhatt

@KevinDente TypescriptでNodejsを使用していますが、解決策を試してみましたが、まだ文字列を取得していて、クエリで返すべきものが返されません。typescriptでそれを行う方法に関するアイデアはありますか?
SOufiane Fadil

9

あなたはこのようにそれを行うことができます:

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

編集:新しい標準にはfromStringではなくfromHexStringがあります


1
さて、さらに「新しい」標準はmongoose.mongo.BSONPure.ObjectID.createFromHexString()(mongoose 3.9.7現在)のようです
Evereq

1
これを実行しようとしている人にとっては、すでにmongo idを使用している場合はidが変換されないため、これは選択した回答よりもはるかに良い回答です。
ed209、2015年

1
これは機能しなくなりました。代わりに受け入れられた回答を使用してください
paper1111

BSONPureはmongoose.mongo私の一部ではありません。誰か確認できますか?
Artur Tagisow

5

コメントから判断すると、あなたは探しています:

mongoose.mongo.BSONPure.ObjectID.isValid

または

mongoose.Types.ObjectId.isValid

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

3
mongoose.Types.ObjectIdとの違いについてコメントしていただけますmongoose.mongo.ObjectIdか?mongooseのオブジェクトプロパティは異なりますが、下の同じメソッドを参照している可能性があります。Typesvs の基礎となるメソッドについてコメントしてくださいmongo
16年

5

私はこの方法を解決できませんでした(確かに長い間検索していません)

mongoose.mongo.BSONPure.ObjectID.fromHexString

スキーマでプロパティのタイプがObjectIdであると想定している場合、変換は暗黙的に行われます。少なくとも、これは4.7.8の場合のようです。

ただし、次のようなものを使用できます。

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

これも使えます

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

それを行う最も簡単な方法です


0

expressおよびmongooseを介してREST APIを実装する場合は、以下のコードスニペットを参照してください。(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
})
}
...

それが役に立てば幸い

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.