• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Problem mit MongoDb driver [NodeJS]

xorg1990

New member
Hi, ich beschäftige mich zurzeit mit MongoDB und Nodejs. Aber irgendwas klappt nicht, ich hoffe hier im Forum hantiert jemand mit nodejs + MongoDb.

Mein vorhaben ist es eine Schleife durch jede vorhandene collection zu machen, aber ich bekomme einen Fehler zurück.

Der Code:
Code:
var mongoCli = require('mongodb').MongoClient;
var app = express();
var assert = require('assert');


var dblink = "mongodb://localhost:27017/RT_Grabber_Users";
var Database = null;
mongoCli.connect(dblink, function(err,db){
	if(err){
		throw err;
	}else{
	console.log("Connectet to Database");
	db.getCollectionNames().forEach(function(colname){
		console.log(collname)
	});
	}
});

Das ist die Fehlermeldung:
Code:
Connectet to Database

/home/xorg1990/workspace/http_server/node_modules/mongodb/lib/mongo_client.js:406
          throw err
                ^
TypeError: Object [object Object] has no method 'getCollectionNames'
    at app.post.userName (/home/xorg1990/workspace/http_server/server.js:15:5)
    at /home/xorg1990/workspace/http_server/node_modules/mongodb/lib/mongo_client.js:403:11
    at process._tickCallback (node.js:442:13)
xorg1990@debian-nodeJs:~/workspace/http_server$ '/usr/share/applications/tomboy.

MongoDB habe ich via apt-get installiert, zuvor habe ich die ppa's dafür apt mitgeteilt, sollte eigentlich aktuell sein.
Den driver habe ich via npm geholt.

System ist debian.

getCollectionNames() habe ich von einer stackoverflow Seite. Eventuell gibt es die Funktion nicht mehr, kennt einer 'ne alternative?

asso fast vergessen,
Ich benutze noch Mongo Management Studio von daher weiß ich das MongoDB richtig funktioniert.
 
Zuletzt bearbeitet:
getCollectionNames() habe ich von einer stackoverflow seite. Eventell gibt es die funktion nicht mher, kennt einer 'ne alternative?
Die Funktion gibt’s immer noch (db.getCollectionNames() — MongoDB Manual 3.0.1).

Aber das ist vollkommen egal, da du dich an das halten mußt, was dir dein node-MongoDB-Interface bietet. Da ich das nicht kenne (benutze selber mongoose), kann ich dich nur auf die entsprechende Dokumentation verweisen.
 
Danke für den link, dass habe ich nicht gefunden, aber irgendwie haut da was nicht hin trotz Neuinstallation.
Dormilich schrieb:
(benutze selber mongoose),
Hm, habe keine mongoose Erfahrung, generell habe ich kein MongoDB Erfahrung.

Ich Probiere mal mongoose, wenn das auch nicht geht, dann :mad:
 
Danke für den Link, habe aber mit mongoose dasselbe Problem wie mit dem normalen MongoDB Driver:

Nodejs:
Code:
var bodyParser = require('body-parser');
var express = require('express');
var app = express();
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/RT_Grabber_Users");
var Schema = new mongoose.Schema({
	LoginName: String,
	Passwort: String,
	Vorname: String,
	Nachname: String,
	Rufzeichen: String,
	Main_Path: String,
	Grabbers: {
		Name: String,
		QTH: String,
		Ertelldatum: {type: Date, default: Date.now},
		Admin_Path: String
	}
});

var User = mongoose.model("User", Schema);

mongoose.connection.on("open", function(ref){
	console.log("connected to db server");
	mongoose.connection.db.collectionNames(function(err, names){
		console.log(names);
	})
});

Console:
Code:
connected to db server

/home/xorg1990/workspace/http_server/node_modules/mongodb/lib/server.js:274
      process.nextTick(function() { throw err; })
                                          ^
TypeError: Object [object Object] has no method 'collectionNames'
    at NativeConnection.app.post.userName (/home/xorg1990/workspace/http_server/server.js:25:25)
    at NativeConnection.emit (events.js:92:17)
    at open (/home/xorg1990/workspace/http_server/node_modules/mongoose/lib/connection.js:485:10)
    at NativeConnection.Connection.onOpen (/home/xorg1990/workspace/http_server/node_modules/mongoose/lib/connection.js:494:5)
    at /home/xorg1990/workspace/http_server/node_modules/mongoose/lib/connection.js:453:10
    at /home/xorg1990/workspace/http_server/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:59:5

Habe nach dieser Installationsanleitung gearbeited:
Install MongoDB on Debian — MongoDB Manual 3.0.1

warum geht das nicht??:confused:
 
warum geht das nicht??
weil die libraries dich nicht zu DB durchrouten.

Ihr Zweck ist schließlich nicht die Administration, sondern die Arbeit mit der DB. Ähnlich wie ein ORM auch nicht automatisch die DB Modellklassen für dich schreibt.
 
Dormilich schrieb:
Ihr Zweck ist schließlich nicht die Administration, sondern die Arbeit mit der DB.
Wenn mir mongoose die Funktion bietet hat das eigentlich zu funktionieren.

Das reine verbinden mit der db und deren collection geht ja, nur eine schleife durch alle collections in einer DB geht nicht.

Bin jetzt wider zurück zu mysql gegangen, das geht wenigstens, auch wenn mysql in nodejs ganz schön umständlich zu handhaben ist.
 
Wenn mir mongoose die Funktion bietet hat das eigentlich zu funktionieren.
ich muß gestehen, daß ich diese Funktion in den API Docs nirgends finde. (zugegeben, ich hab’s bisher auch nie gebraucht)

vielleicht hilft ja ein object dump um rauszufinden, was dieses object eigentlich kann, möglicherweise wird auch nur open/close durchgeroutet)

Das reine verbinden mit der db und deren collection geht ja, nur eine schleife durch alle collections in einer DB geht nicht.
mongoose ist ein ORM, ohne die entsprechenden Model-Objekte kannst du in mongoose eh nichts mit den collections machen.

Bin jetzt wider zurück zu mysql gegangen, das geht wenigstens
es sind halt völlig verschiedenen Ansätze. für den reinen Datenzugriff brauchst du eine library, die das ausdrücklich anbietet.

Mal eine Liste von Kandidaten (sh. Node.js MongoDB Driver), wobei ich da jetzt aber nicht weitergelesen haben, ob die wirklich machen, was du willst.
 
Dormilich schrieb:
ich muß gestehen, daß ich diese Funktion in den API Docs nirgends finde.
Und ich muss gestehen ich habe mir die API noch nicht so genau angesehen. Ich habe gegoogelt und bin bei stackoverflow gelandet:
node.js - Trying to get a list of collections from mongoose - Stack Overflow

Dormilich schrieb:
es sind halt völlig verschiedenen Ansätze
Jo, genau wie php und nodejs zwei unterschiedliche Sachen sind.

Es ging mir nur darum,... ich lege für jeden Funkamateur eine Collection an wo eben Daten abgespeichert werden, um nun herauszufinden wer registriert ist bietet sich diese Funktion doch bestens an. Der Name der Collection wäre das Rufzeichen, so weiß jeder wer gemeint ist.
Eine Registrierung gibt es nicht... wer meine Software nutzen möchte schreibt mir ne Mail, so ist das bei uns Funkamateuren.

Die Logindaten für jeden User wäre dann 'ne separate Collection, deswegen Mongo Management Studio, zum registrieren und editieren... so die Erklärung in kurz.
 
Es ging mir nur darum,... ich lege für jeden Funkamateur eine Collection an wo eben Daten abgespeichert werden, um nun herauszufinden wer registriert ist bietet sich diese Funktion doch bestens an. Der Name der Collection wäre das Rufzeichen, so weiß jeder wer gemeint ist.
und in MySQL hat dann auch jeder eine eigene Tabelle?

Eine collection entspricht einer separaten Tabelle. das ist dann das was man in mongoose mit einer Model-Klasse anspricht.
 
Dormilich schrieb:
und in MySQL hat dann auch jeder eine eigene Tabelle?
So ist es, und da wird folgendes gepeichert:
Code:
"Grabber" : {
		"MF_NormalCW" : {
			"UserRate" : 192000,
			"DSP_Window" : "Hann",
			"ScrollInter"  : 40,
        	"FFTInputLength" : 16384,
        	"F_min" : 0, 
        	"F_max" : 2000,
        	"Offs" : 0,
        	"db_from" : -120,
        	"db_to" : 0, 
        	"colors" : "['#000000', '#1a0a6a', '#0b03ca', '#402afd', '#745dfa', '#9689f6', '#b3b2f5', '#d2dbf6', '#ffffff']",
        	"brighness" : 1,
        	"contrast": 1
			},
			
		"MF_QRSS20" : {
			"UserRate" : 192000,
			"DSP_Window" : "Hann",
			"ScrollInter"  : 200,
        	"FFTInputLength" : 8192,
        	"F_min" : 0, 
        	"F_max" : 3000,
        	"Offs" : 0,
        	"db_from" : -100,
        	"db_to" : 0, 
        	"colors" : "['#000000', '#1a0a6a', '#0b03ca', '#402afd', '#745dfa', '#9689f6', '#b3b2f5', '#d2dbf6', '#ffffff']",
        	"brighness" : 1,
        	"contrast": 1
			}
Das muss dann für jeden User gepeichert werden, jeder User kann mehrere Grabber besitzen und jeder Grabber wiederum besitzt mehrere Windows (Bilder die visualisiert werden) [MF_NormalCW, MF_QRSS20]

alles in eine .json Datei packen ist auch doof, zumal lässt sich das dann schlecht bis gar nicht erweitern.
 
Das muss dann für jeden User gepeichert werden, jeder User kann mehrere Grabber besitzen und jeder Grabber wiederum besitzt mehrere Windows (Bilder die visualisiert werden)
Das ist noch lange kein Grund für jeden User eine eigene Tabelle anzulegen, wozu gibt’s denn Foreign Keys (sowohl in MySQL als auch in MongoDB) ?

Du solltest mit je einer Tabelle für User, Grabber und Windows prima hinkommen können. Wichtig sind halt die Referenzen untereinander.
 
Zuletzt bearbeitet:
Zurück
Oben