找回密码
 立即注册
软件设计/软件工程 2022-05-03 223 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
我有一个名为“account”的数据模型。它存储了一个“用户”。
  1. var mongoose=require("mongoose");

  2. mongoose.connect("mongodb://localhost/dataseed");

  3. var db=mongoose.connection;

  4. var accountSchema=mongoose.Schema({
  5.      user:{
  6.       type:mongoose.Schema.Types.ObjectId,
  7.       ref:"user"
  8.     },
  9.     accountholder:{
  10.         type:String
  11.     },
  12.     cvv:{
  13.         type:String
  14.     },
  15.     expiryyear:{
  16.     type:String
  17.     },
  18.     expirymonth:{
  19.     type:String
  20.     },
  21.     accountnumber:{
  22.         type:Number
  23.     },
  24.     currentamount:{
  25.         type:Number
  26.     },
  27.     transferedamount:{
  28.         type:Number
  29.     },
  30.     withdrawnamount:{
  31.         type:Number   
  32.     }
  33. });

  34. var account = module.exports = mongoose.model('account', accountSchema);
复制代码

当我尝试使用 account.find() 函数查找帐户时。但是,当我尝试访问 account.accountnumber 时,它返回 undefined

我正在像这样查询我的模型:
  1. data.findById({"_id":req.params.id},function(err,data){

  2.         console.log("DATA.USER --------------------------------------------------");
  3.         console.log(data.user);

  4.         if(err)console.log(err);
  5.         else{
  6.               acessToken.create({user:req.user,data:req.params.id,token:token},function(err,acess){
  7.                   if(err)console.log(err);
  8.                   else{
  9.                       console.log("ACCESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSss");
  10.                         console.log(acess.user);
  11.                         transporter.sendMail(mailOptions, function(error, info){
  12.                           if (error) {
  13.                               console.log(error);
  14.                           }
  15.                           else
  16.                           {
  17.                             console.log("------------------------------------------------------------------------------------TYPE OF USER ID: " + typeof(req.user._id));
  18.                             account.find({"user":req.user},function(err,d){
  19.                               if(err)console.log(err)

  20.                                     var amount=d.currentamount-data.price;
  21.                                     var transferedamount=d.transferedamount+data.price;
  22.                                     console.log("Amount: "+amount); // NaN

  23.                                 account.findByIdAndUpdate({user:req.user},{currentamount:amount,transferedamount:transferedamount},function(err,update){
  24.                                   if(err)console.log(err);
  25.                                     console.log('Email sent: ' + info.response);



  26.                                     //getUsername of seller

  27.                                     // console.log(data.user)
  28.                                     user.findById({"_id":data.user},function(err,seller){
  29.                                         if(err){
  30.                                         console.log(err);
  31.                                         }else{

  32.                                           var buyer = req.user.username;
  33.                                           var seller = seller.username;
  34.                                           var priceOfData = data.price;
  35.                                           //ccNumber undefined
  36.                                           var ccnumber = d.accountnumber;


  37.                                         console.log("Buyer Name " +buyer);
  38.                                         console.log("Seller Name " +seller);
  39.                                          console.log("Price " +priceOfData);
  40.                                         console.log("Purchased on Credit Card Number " +ccnumber);


  41.                                             res.render('buyer/sold.ejs');

  42.                                         }
  43.                                       });
  44.                                   });
  45.                               });
  46.                           }
  47.                       });
  48.                     }
  49.               });
  50.           }
  51.         });
复制代码

模型“数据”和“accessToken”用于查找产品并生成访问令牌以购买产品。

这是我在控制台上得到的输出。
  1. 5ca9ae4c044bab18588edf5b
  2. ACCESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSss
  3. 5cd4cc83c3c65514c61ae4f3
  4. ------------------------------------------------------------------------------------TYPE OF USER ID: object
  5. Amount: NaN
  6. { CastError: Cast to ObjectId failed for value "{ user: 5cd4cc83c3c65514c61ae4f3 }" at path "_id" for model "account"
  7.     at MongooseError.CastError (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/error/cast.js:29:11)
  8.     at ObjectId.cast (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/schema/objectid.js:232:11)
  9.     at ObjectId.SchemaType.applySetters (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/schematype.js:845:12)
  10.     at ObjectId.SchemaType._castForQuery (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/schematype.js:1248:15)
  11.     at ObjectId.SchemaType.castForQuery (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/schematype.js:1238:15)
  12.     at ObjectId.SchemaType.castForQueryWrapper (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/schematype.js:1217:15)
  13.     at cast (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/cast.js:252:34)
  14.     at Query.cast (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/query.js:4334:12)
  15.     at castQuery (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/query.js:4186:18)
  16.     at Query._findAndModify (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/query.js:3203:23)
  17.     at Query.<anonymous> (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/query.js:2830:8)
  18.     at Query._wrappedThunk [as _findOneAndUpdate] (/home/ubuntu/workspace/DataSeed/node_modules/mongoose/lib/helpers/query/wrapThunk.js:16:8)
  19.     at process.nextTick (/home/ubuntu/workspace/DataSeed/node_modules/kareem/index.js:369:33)
  20.     at _combinedTickCallback (internal/process/next_tick.js:73:7)
  21.     at process._tickCallback (internal/process/next_tick.js:104:9)
  22.   message: 'Cast to ObjectId failed for value &quot;{ user: 5cd4cc83c3c65514c61ae4f3 }&quot; at path &quot;_id&quot; for model &quot;account&quot;',
  23.   name: 'CastError',
  24.   stringValue: '&quot;{ user: 5cd4cc83c3c65514c61ae4f3 }&quot;',
  25.   kind: 'ObjectId',
  26.   value: { user: 5cd4cc83c3c65514c61ae4f3 },
  27.   path: '_id',
  28.   reason: undefined,
  29.   model:
  30.    { [Function: model]
  31.      hooks: Kareem { _pres: [Object], _posts: [Object] },
  32.      base:
  33.       Mongoose {
  34.         connections: [Object],
  35.         models: [Object],
  36.         modelSchemas: [Object],
  37.         options: [Object],
  38.         _pluralize: [Function: pluralize],
  39.         Schema: [Object],
  40.         model: [Function],
  41.         plugins: [Object] },
  42.      modelName: 'account',
  43.      model: [Function: model],
  44.      db:
  45.       NativeConnection {
  46.         base: [Object],
  47.         collections: [Object],
  48.         models: [Object],
  49.         config: [Object],
  50.         replica: false,
  51.         options: null,
  52.         otherDbs: [],
  53.         relatedDbs: {},
  54.         states: [Object],
  55.         _readyState: 1,
  56.         _closeCalled: false,
  57.         _hasOpened: true,
  58.         '$internalEmitter': [Object],
  59.         _listening: false,
  60.         _events: [Object],
  61.         _eventsCount: 1,
  62.         _connectionOptions: [Object],
  63.         name: 'dataseed',
  64.         host: 'localhost',
  65.         port: 27017,
  66.         user: undefined,
  67.         pass: undefined,
  68.         client: [Object],
  69.         '$initialConnection': [Object],
  70.         db: [Object] },
  71.      discriminators: undefined,
  72.      events:
  73.       EventEmitter {
  74.         domain: null,
  75.         _events: {},
  76.         _eventsCount: 0,
  77.         _maxListeners: undefined },
  78.      '$appliedMethods': true,
  79.      '$appliedHooks': true,
  80.      _middleware: Kareem { _pres: [Object], _posts: [Object] },
  81.      schema:
  82.       Schema {
  83.         obj: [Object],
  84.         paths: [Object],
  85.         aliases: {},
  86.         subpaths: {},
  87.         virtuals: [Object],
  88.         singleNestedPaths: {},
  89.         nested: {},
  90.         inherits: {},
  91.         callQueue: [],
  92.         _indexes: [],
  93.         methods: {},
  94.         methodOptions: {},
  95.         statics: {},
  96.         tree: [Object],
  97.         query: {},
  98.         childSchemas: [],
  99.         plugins: [Object],
  100.         '$id': 7,
  101.         s: [Object],
  102.         _userProvidedOptions: {},
  103.         options: [Object],
  104.         '$globalPluginsApplied': true,
  105.         _requiredpaths: [] },
  106.      collection:
  107.       NativeCollection {
  108.         collection: [Object],
  109.         opts: [Object],
  110.         name: 'accounts',
  111.         collectionName: 'accounts',
  112.         conn: [Object],
  113.         queue: [],
  114.         buffer: false,
  115.         emitter: [Object] },
  116.      Query: { [Function] base: [Object] },
  117.      '$__insertMany': [Function],
  118.      '$init': Promise { [Object] },
  119.      '$caught': true } }
  120. Email sent: 250 2.0.0 OK  1557500841 d4sm5108746wrv.42 - gsmtp
  121. Buyer Name murtaza1
  122. Seller Name test1
  123. Price 100
  124. Purchased on Credit Card Number undefined
复制代码

回答
您的代码的问题在于,当您查询数据库时,您还需要调用 populate 公开的 MongoDB 方法,特别是 Mongoose 方法,我假设您使用它来查询数据库。有关猫鼬文档的更多信息。

为什么会这样?好吧,因为您声明使用 as account Schema 来引用您的引用,所以当 Mongoose 查询数据库时,它只返回该特定填充引用的文档的 ID,而不是 account Schema 方法。希望这对你有帮助,干杯齐格弗里德





上一篇:DSL 的 Kotlin sink 函数需要说明
下一篇:如何设置一些 Tkinter 小部件的边框颜色?