Reputation: 1722
I have two objects
first:
const Order = {
orderNumber: String,
deliveryInfo: [
{
type: Schema.Types.ObjectId,
ref: 'Transit',
},
],
}
second:
const Transit = {
order: {
type: Schema.Types.ObjectId,
ref: 'Order',
}
}
Is it possible in mongoose to query for a specific order number via the Transit
model?
something like this
const query = {}
query['order.orderNumber'] = '9999'
TransitModal.find(query)
for some reason, I do not get any results.
If the query is changed to the following shape
query.order = {
orderNumber: 1,
};
There's following error
message: CastError: Cast to ObjectId failed for value "{ orderNumber: '9999' }" at path "order" for model "Transit"
at model.Query.exec (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/query.js:4358:21)
at Function.paginate (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose-paginate-v2/dist/index.js:127:49)
at Transit._callee$ (/Users/eugene/Documents/development/conjure-admin/server/dataService/models/transit.js:80:36)
at tryCatch (/Users/eugene/Documents/development/conjure-admin/server/node_modules/regenerator-runtime/runtime.js:63:40)
at Generator.invoke [as _invoke] (/Users/eugene/Documents/development/conjure-admin/server/node_modules/regenerator-runtime/runtime.js:293:22)
at Generator.next (/Users/eugene/Documents/development/conjure-admin/server/node_modules/regenerator-runtime/runtime.js:118:21)
at asyncGeneratorStep (/Users/eugene/Documents/development/conjure-admin/server/dataService/models/transit.js:24:103)
at _next (/Users/eugene/Documents/development/conjure-admin/server/dataService/models/transit.js:26:194)
at /Users/eugene/Documents/development/conjure-admin/server/dataService/models/transit.js:26:364
at new Promise (<anonymous>)
at Transit.<anonymous> (/Users/eugene/Documents/development/conjure-admin/server/dataService/models/transit.js:26:97)
at Transit.findPaginated (/Users/eugene/Documents/development/conjure-admin/server/dataService/models/transit.js:163:31)
at _callee$ (/Users/eugene/Documents/development/conjure-admin/server/controller/transit.controller.js:41:41)
at tryCatch (/Users/eugene/Documents/development/conjure-admin/server/node_modules/regenerator-runtime/runtime.js:63:40)
at Generator.invoke [as _invoke] (/Users/eugene/Documents/development/conjure-admin/server/node_modules/regenerator-runtime/runtime.js:293:22)
at Generator.next (/Users/eugene/Documents/development/conjure-admin/server/node_modules/regenerator-runtime/runtime.js:118:21)
at asyncGeneratorStep (/Users/eugene/Documents/development/conjure-admin/server/controller/transit.controller.js:32:103)
at _next (/Users/eugene/Documents/development/conjure-admin/server/controller/transit.controller.js:34:194)
at /Users/eugene/Documents/development/conjure-admin/server/controller/transit.controller.js:34:364
at new Promise (<anonymous>)
at /Users/eugene/Documents/development/conjure-admin/server/controller/transit.controller.js:34:97
at /Users/eugene/Documents/development/conjure-admin/server/controller/transit.controller.js:10:1
at Layer.handle [as handle_request] (/Users/eugene/Documents/development/conjure-admin/server/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/eugene/Documents/development/conjure-admin/server/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/eugene/Documents/development/conjure-admin/server/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/eugene/Documents/development/conjure-admin/server/node_modules/express/lib/router/layer.js:95:5)
at /Users/eugene/Documents/development/conjure-admin/server/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/eugene/Documents/development/conjure-admin/server/node_modules/express/lib/router/index.js:335:12) {
messageFormat: undefined,
stringValue: `"{ orderNumber: '9999' }"`,
kind: 'ObjectId',
value: { orderNumber: '9999' },
path: 'order',
reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/Users/eugene/Documents/development/conjure-admin/server/node_modules/bson/lib/bson/objectid.js:59:11)
at castObjectId (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/cast/objectid.js:25:12)
at ObjectId.cast (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/schema/objectid.js:267:12)
at ObjectId.SchemaType.applySetters (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/schematype.js:1075:12)
at ObjectId.SchemaType._castForQuery (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/schematype.js:1510:15)
at ObjectId.SchemaType.castForQuery (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/schematype.js:1500:15)
at ObjectId.SchemaType.castForQueryWrapper (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/schematype.js:1477:20)
at cast (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/cast.js:274:34)
at model.Query.Query.cast (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/query.js:4759:12)
at model.Query.<anonymous> (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/query.js:2238:10)
at model.Query._wrappedThunk [as _countDocuments] (/Users/eugene/Documents/development/conjure-admin/server/node_modules/mongoose/lib/helpers/query/wrapThunk.js:16:8)
at /Users/eugene/Documents/development/conjure-admin/server/node_modules/kareem/index.js:369:33
at processTicksAndRejections (internal/process/task_queues.js:79:11)
},
Upvotes: 1
Views: 77
Reputation: 479
Try this one :
TransitModal.find({}).populate('order').exec((err, transits) => {
transits= transits.filter((transit) =>{
return transit.order.orderNumber === '9999' ;
});
});
Upvotes: 0
Reputation: 686
TransitModal.aggregate(
[
{ "$lookup": {
"from": ItemOrders.collection.name,
"localField": "order",
"foreignField": "_id",
"as": "order"
}},
{ "$unwind": "$order" },
{ "$match": { "order.orderNumber" : '9999' } } },
],
function(err, result) {
// do something
}
)
Upvotes: 1