О реализации окна поиска символов с двумя опциями (Поиск в БД и Поиск в 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
})
Дайте мне знать, если я что-то упустил.