2015-01-21 4 views
11

MongoDB ist cool genug, erstellen Sie die Datenbank/Sammlung on the fly zu erstellen, wenn wir einen Code ähnlichWie funktioniert mongodb Datenbank/Sammlung on the fly

db.store.save({a: 789}); 

Es erstellt automatisch store Sammlung und fügen Sie ein Dokument laufen zu ihm.

Mein JavaScript Verständnis besagt, dass es nicht möglich ist, eine Methode auf eine undefinierte Eigenschaft von db Objekt aufzurufen. Es sollte zu einer Art Fehler/Ausnahme geführt haben.

Ich bin neugierig, um die Geschehnisse hinter der Szene zu verstehen, und wenn es einen nützlichen Link gibt, bitte weisen Sie mich darauf hin. Googeln hat mir nicht viel geholfen.

+1

Obwohl ich weiß nicht, die Antwort auf diese Frage, die ich MongoDB glauben ist in C++ entwickelt. Was Sie in Javascript verwenden, ist ein Treiber, diese Treiber werden in der Sprache entwickelt, in der sie verwendet werden sollen (jemand korrigiert mich, wenn ich mich irre). Die Frage bleibt jedoch bestehen, ich dachte nur, dass es sinnvoll wäre, dies zu beachten. – lascort

+0

Mongo ist [open source] (https://github.com/mongodb), also könntest du im [JS-Treiber] (https://github.com/mongodb/node-mongodb-native) herumstöbern (falls Sie haben die Zeit) zu sehen, ob Sie es herausfinden können =) – jadarnel27

Antwort

2

Wie ich in einer NodeJS Umgebung erinnern Sie etwas tun müssen, um tatsächlich einen Datensatz zu erstellen: db.get('collectionName').insert({..something...}); oder db.get('collectionName').save({...something...}); aber bekommt man nicht den Namen der Sammlung als eine Eigenschaft zu verwenden, von db.

Die Zeile, die Sie erwähnen, wird nur in der MongoDB-Shell verwendet, die kein Javascript ist. Ich vermute, Sie missverstehen, was ist MongoDB Shell und was ist ein MongoDB-Treiber.

So lange Geschichte kurz MongoDB (Treiber) ist nicht in der Lage, auf eine undefinierte Eigenschaft zuzugreifen.

EDIT

Als Antwort auf Ihren Kommentar ..

MongoDB JS Fahrer GitHub Seite ziemlich weist darauf hin, wie ein Feld einfügen und verwendet immer die Syntax I erwähnt: https://github.com/mongodb/node-mongodb-native

Wie Für das, was Sie in der Shell verwenden, ist es ziemlich klar, dass Sie nicht einfach Javascript in einer Befehlsshell verwenden können. Ich denke, ich werde Sie auf einen Ort verweisen, an dem Sie sehen können, in welcher Sprache MongoDB entwickelt wurde: http://www.mongodb.org/ so ziemlich die erste Zeile sagt, dass es in C++ geschrieben ist.

Hoffnung hilft dies Ihre Frage zu klären

+0

Ja und die Antwort scheint wie eine Erweiterung Ihres Kommentars zu meiner Frage. Danke vielmals. Wenn möglich können Sie mich bitte auf einen Link verweisen, der dasselbe zitiert. – dopeddude

+0

@DopedDude Überprüfen Sie die Bearbeitung – lascort

+0

Ja, das hat geholfen .. Danke. – dopeddude

5

In JavaScript gibt es eine Möglichkeit, eine Funktion zu definieren, die ausgeführt wird, wenn eine undefinierte Methode aufgerufen wird.

Beispiel:

var o = { 
    __noSuchMethod__: function(id, args) { console.log(id, '(' + args.join(', ') + ')'); } 
}; 

o.foo(1, 2, 3); 
o.bar(4, 5); 
o.baz(); 

// Output 
// foo (1, 2, 3) 
// bar (4, 5) 
// baz() 

Hinweis: Dies ist ein nicht-Standard-Feature und heute funktioniert nur in Firefox.

Ich weiß nicht, wie MongoDB diese Funktion implementiert, aber ich reagiere nur, um zu melden, dass auf diese Weise getan werden kann.

Fot weitere Details zu sehen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod

+2

FYI, MongoDB 2.4+ verwendet die [V8 JavaScript Engine] (http: //docs.mongodb.org/manual/release-notes/2.4-javascript /). – Stennie