Я пытаюсь сохранить данные веб-сокета по мере их обновления в mongodb и иметь возможность запрашивать данные с помощью GQL! Мне придется переделать то, что у меня есть, но я просто немного не понимаю, как go об этом?
В любом случае, любая помощь будет принята с благодарностью <3 </p>
const mongoose = require('mongoose');
mongoose.connect("URI", {
useNewUrlParser: true,
useFindAndModify: false,
useCreateIndex: true,
useUnifiedTopology: true,
});
const { ApolloServer, PubSub, gql } = require('apollo-server');
const pubsub = new PubSub();
// saves in db as plural eg: btcusdklines ???
const BTCUSDkline = mongoose.model("BTCUSDkline",{
time: Number,
open: Number,
high: Number,
low: Number,
close: Number,
});
const typeDefs = gql`
type Query {
getBTCUSDkline: [BTCUSDkline]
}
type BTCUSDkline {
id: ID!
time: Int
open: Int
high: Int
low: Int
close: Int
}
`;
const resolvers = {
Query: {
getBTCUSDkline: ()=> BTCUSDkline.find(),
},
}
const server = new ApolloServer({
typeDefs,
resolvers,
});
server.listen().then(({ url }) => {
console.log(`? server live @ ${url}`);
});
const ws = new WebsocketClient({key: API_KEY, secret: PRIVATE_KEY}, logger);
ws.subscribe(["klineV2.1.BTCUSD"]);
ws.on('open', function() {
console.log('connection open');
});
ws.on('update', function(message) {
const btcusdOpen = message.data[0].open;
const btcusdClose = message.data[0].close;
const btcusdHigh = message.data[0].high;
const btcusdLow = message.data[0].low;
const btcusdTime = message.data[0].timestamp;
console.log(message);
// define Schema
var BTCUSDklineSchema = mongoose.Schema({
time: Number,
open: Number,
high: Number,
low: Number,
close: Number,
});
// compile schema to model
var Data = mongoose.model('Data', BTCUSDklineSchema, 'BTCUSDkline');
// a document instance
var data1 = new Data({ time:btcusdTime, open:btcusdOpen, high:btcusdHigh, low:btcusdLow, close: btcusdClose });
// save model to database
data1.save(function (data) {
console.log("just saved to BTCUSDkline collection!");
});
});
ws.on('response', function(response) {
console.log('response', response);
});
ws.on('close', function() {
console.log('connection closed');
});
ws.on('error', function(err) {
console.error('ERR', err);
});
который работает в первый раз, но затем выдает следующую ошибку во второй раз:
throw new _mongoose.Error.OverwriteModelError(name);
^
OverwriteModelError: Cannot overwrite `Data` model once compiled.