0
MongoDBとMongooseを使用してNode.JSアプリケーションを作成しています。私が直面した問題の1つは、その要素をそのObjectID
またはurl
フィールドのいずれかで探す必要があることです。私はそれをこのように書くことを試みた:MongoDB - IDまたは他のフィールドでエントリを検索します
const mongoose = require('mongoose');
const ObjectID = mongoose.Types.ObjectId;
Event
.findOne({ $or: [
{ _id: new ObjectID('hello) },
{ url: 'hello },
] })
// doing domething with the result
しかし文字列が有効なObjectID
でない場合、プログラムがクラッシュする、それが有効ObjectID
文字列ではありませんと言って:私が削除されます場合は
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/usr/app/oms-events/node_modules/bson/lib/bson/objectid.js:34:11)
at Server.exports.fetchSingleEvent (/usr/app/oms-events/lib/middlewares.js:178:14)
at next (/usr/app/oms-events/node_modules/restify/lib/server.js:912:30)
at f (/usr/app/oms-events/node_modules/once/once.js:25:25)
at Request.httprequest [as _callback] (/usr/app/oms-events/lib/middlewares.js:165:14)
at Request.self.callback (/usr/app/oms-events/node_modules/request/request.js:186:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (/usr/app/oms-events/node_modules/request/request.js:1081:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (/usr/app/oms-events/node_modules/request/request.js:1001:12)
at IncomingMessage.g (events.js:292:16)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
Program node /usr/app/oms-events/lib/server.js exited with code 1
ここのようなオブジェクトIDへの変換、:
はEvent
.findOne({ $or: [
{ _id: 'hello' },
{ url: 'hello' },
] })
それはまたCastError
でクラッシュします:
{ MongooseError: Cast to ObjectId failed for value "hello" at path "_id"
at CastError (/usr/app/oms-events/node_modules/mongoose/lib/error/cast.js:26:11)
at ObjectId.cast (/usr/app/oms-events/node_modules/mongoose/lib/schema/objectid.js:147:13)
at ObjectId.castForQuery (/usr/app/oms-events/node_modules/mongoose/lib/schema/objectid.js:187:15)
at cast (/usr/app/oms-events/node_modules/mongoose/lib/cast.js:218:32)
at cast (/usr/app/oms-events/node_modules/mongoose/lib/cast.js:36:18)
at model.Query.Query.cast (/usr/app/oms-events/node_modules/mongoose/lib/query.js:2741:10)
at model.Query.Query.findOne (/usr/app/oms-events/node_modules/mongoose/lib/query.js:1354:10)
at /usr/app/oms-events/node_modules/mongoose/lib/query.js:2300:21
at model.Query.exec (/usr/app/oms-events/node_modules/mongoose/lib/query.js:2294:17)
at Server.exports.fetchSingleEvent (/usr/app/oms-events/lib/middlewares.js:182:6)
at next (/usr/app/oms-events/node_modules/restify/lib/server.js:912:30)
at f (/usr/app/oms-events/node_modules/once/once.js:25:25)
at Server.exports.fetchUserDetails (/usr/app/oms-events/lib/middlewares.js:92:12)
at next (/usr/app/oms-events/node_modules/restify/lib/server.js:912:30)
at f (/usr/app/oms-events/node_modules/once/once.js:25:25)
at UserCache.findOne (/usr/app/oms-events/lib/middlewares.js:85:12)
message: 'Cast to ObjectId failed for value "hello" at path "_id"',
name: 'CastError',
kind: 'ObjectId',
value: 'hello',
path: '_id',
reason: undefined }
したがって、問題は次のとおりです。ObjectID
またはurl
フィールドで要素を見つけるにはどうすればよいですか?