首页 > 解决方案 > 实例化新对象时如何将数据推送到密钥本身?

问题描述

关于实现具有两个选项(DB 搜索和 Web Api 搜索)的符号搜索框。当我在搜索框中输入符号(例如:AAPL - aple stock)时,fetch()每次都会通过网络发送请求。然后将结果保存在数据库中。每次实例化new Stock()对象时,我都会将结果推送到对象数据键。因为它不起作用

const stock = new Stock({ //const {Stock} = require('../models/Stock')
      symbol: curValue,// req.params.symbol
      data: webApiData.map(function (item) {
        this.data.push(item)
      })
    })

作为解决方案,推动不在new Stock({})

 webApiData.map(item => {
      stock.data.push(item)
    })

这是完整的工作代码:

(async function creatStock() {
  try {
    const webApiData = await fetchWebApi(urlCompact)
    const stock = new Stock({ //const {Stock} = require('../models/Stock')
      symbol: curValue// req.params.symbol
      // data: webApiData.map(function (item) {
      //   this.data.push(item)
      // })
    })

    webApiData.map(item => {
      stock.data.push(item)
    })

    const query = { symbol: `${curValue}` }
    const update = { $addToSet: { data: stock.data } }
    const options = { upsert: true, new: true }

    const stockResult = await Stock.findOneAndUpdate(query, update, options)
    console.log('Saved the symbol web TO db', stockResult.symbol)
    return res.send(webApiData)

  } catch (ex) {
    console.log(`creatStock error: ${ex.errors}`)
  }
})()

这是数据库的架构

const ChildSchemaData = new mongoose.Schema({
  "_id": false,
  date: { type: mongoose.Types.Decimal128 },
  open: { type: mongoose.Types.Decimal128 },
  high: { type: mongoose.Types.Decimal128 },
  low: { type: mongoose.Types.Decimal128 },
  close: { type: mongoose.Types.Decimal128 },
  volume: { type: mongoose.Types.Decimal128 }
})

const ParentSchemaSymbol = new mongoose.Schema({
  "_id": false,
  symbol: {
    type: String,
    trim: true,
    minlength: 1,
    uppercase: true,
    required: 'Please enter a valid symbol, min 1 character'
  },
  // Array of subdocuments
  data: [ChildSchemaData],
  slug: String

})

如果我遗漏了什么,请告诉我。

标签: javascriptnode.jsexpressmongoose

解决方案


推荐阅读