#javascript #node.js #mongodb
Вопрос:
мне нужно сохранить кучу скомпилированных моделей в объекте, откуда я позже захочу вызвать их для вставки документов в MongoDB.
const mongoose = require('mongoose')
const mySchema = new mongoose.Schema({
blah: Number,
stamp: Number
})
let collections = {}
for( let i = 0; i < 5; i ) {
collections['collection_' i] = mongoose.model('testtttttt_' i, mySchema)
}
// testing
let newEnrty = new collections['collection_0']({
blah: 11,
stamp: 22
});
console.log(newEnrty)
это работает, и console.log() выдает мне правильный объект { blah: 11, stamp: 22, _id: new ObjectId("6131fedde4bf37f0edf0d158") }
но теперь я хочу, чтобы мои коллекции-объекты создавались в моем классе-оболочке mongo
const mongoose = require('mongoose')
const timeseriesSchema = require('../scheme/ts_schema')
class MongoClient {
constructor(cfg) {
// CONNECT TO MONGO-ENGINE
mongoose.connect(cfg.mongoUrl cfg.mongoDbName, {
useNewUrlParser: true,
useUnifiedTopology: true
})
this.db = mongoose.connection
this.collections = {}
// GET NOTIFIED ON CONNECTION-ERROR
this.db.on('error', function (err) {
console.log('Could not connect to mongo server on ' cfg.mongoUrl)
console.log(err)
});
// DISPLAY STATUS ON CONNECT
this.db.once('open', () => {
console.log("Connected to " cfg.mongoUrl " (" cfg.mongoDbName ")")
})
}
// Create a model for every device
initDeviceCollections(devices) {
for(let i = 0; i < devices.length; i ) {
this.collections[devices[i]] = mongoose.model(devices[i], timeseriesSchema)
}
}
// Write Scheme into DB
put(newEntry) {
newEntry.save(function(err) {
// TODO: log error or notify dev
if(err) {
console.log(err);
}
console.log('saved', newEntry)
});
}
}
module.exports = {
MongoClient: MongoClient
};
теперь, когда я инициализирую экземпляр этого класса, вызываю initDeviceCollections()
и создаю и помещаю() запись, я получаю пустой документ в своем mongodb(?)
const cfg = require('./src/config/config')
const MongoClient = require('./src/lib/mongoClient.class')
const mongoClient = new MongoClient.MongoClient(cfg.mongo)
// Compile all models for all schemas
mongoClient.initDeviceCollections(cfg.mqqt.devices)
let entry = new mongoClient.collections['01338522'] ({
timeseriesID: 11,
stamp: 22,
unit: "ddd",
power: 33,
counter: 44
})
mongoClient.put(entry);
I can’t help.. can someone tell me, what I am doing wrong?