首页 > 解决方案 > NodeJs + 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-wrapper-class 中创建我的集合对象

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()并创建 & put() 一个条目时,我在我的 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); 

我无能为力..有人可以告诉我,我做错了什么吗?

标签: javascriptnode.jsmongodb

解决方案


推荐阅读