[软件设计/软件工程] MongoDB未找到数据:返回未定义

[复制链接]
发表于 2022-5-3 11:50:05
问题
我有一个名为“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 小部件的边框颜色?

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表