Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
357 views
in Technique[技术] by (71.8m points)

mongodb - Mongoose search property of a referenced object

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
TransitModal.aggregate(
  [
    { "$lookup": {
      "from": ItemOrders.collection.name,
      "localField": "order",
      "foreignField": "_id",
      "as": "order"
    }},
    { "$unwind": "$order" },
    { "$match": { "order.orderNumber" : '9999' } } },
  ],
  function(err, result) {
    // do something
  }
)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...