引用对象的猫鼬搜索属性

问题描述

我有两个对象

首先:

const Order = {
     orderNumber: String,deliveryInfo: [
          {
            type: Schema.Types.ObjectId,ref: 'Transit',},],}

第二个:

 const Transit = {
     order: {
          type: Schema.Types.ObjectId,ref: 'Order',}
 }

mongoose 是否可以通过 Transit 模型查询特定的订单号?

类似的东西

const query = {}
query['order.orderNumber'] = '9999'

TransitModal.find(query)

出于某种原因,我没有得到任何结果。

如果查询变成如下形状

    query.order = {
      orderNumber: 1,};

出现以下错误

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

解决方法

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

试试这个:

TransitModal.find({}).populate('order').exec((err,transits) => {
  transits= transits.filter((transit) =>{
    return transit.order.orderNumber === '9999' ; 
  });
});

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...