О реализации окна поиска символов с двумя параметрами (поиск в БД и поиск в веб-API). Пока я набираю символ (например: AAPL - акции Apple) в поле поиска, запрос 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.info('Saved the symbol web TO db', stockResult.symbol)
return res.send(webApiData)
} catch (ex) {
console.info(`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
})
Дайте мне знать, если я что-то упустил.
webApiData является результатом массива объектов fetch(), который я все еще должен пройти в цикле и вставить в ключ data:. Или я не понимаю, что вы имели в виду?
Зачем нужен цикл? Почему вы не можете просто определить свойство .data как простой ответ массива webApiData?
Я только что добавил схему к вопросу.
Я извлекаю данные, чтобы нарисовать диаграмму, содержащую множество точек данных, которые мне нужно просмотреть.
Я только что проверил, выглядит хорошо! Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Почему не просто
data: webApiData? Похоже,.mapвообще не нужен.