web-dev-qa-db-ja.com

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

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

137
JRPete

次のようにできます:

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

次のようにできます:

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

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

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

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

mongoose.mongo.BSONPure.ObjectID.isValid

または

mongoose.Types.ObjectId.isValid
5
A T

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

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);
}
4