2015-01-21 17 views
11

MongoDB è abbastanza fresco per creare il database/raccolta al volo, se corriamo un codice simile aCome fa mongodb creare il database/raccolta al volo

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

crea automaticamente store raccolta e aggiungere un documento ad esso.

La mia comprensione di javascript dice che non è possibile chiamare un metodo su una proprietà non definita dell'oggetto db. Avrebbe dovuto provocare qualche tipo di errore/eccezione.

Sono curioso di capire gli avvenimenti dietro la scena e se c'è qualche collegamento utile per favore indicatemi quelli. Googling non mi ha aiutato molto.

+1

Anche se io non conosco la risposta a questa domanda credo MongoDB è sviluppato in C++. Quello che usi in Javascript è un driver, quei driver sono sviluppati nella lingua che dovrebbe essere usata (qualcuno mi correggerà se mi sbaglio). La domanda persiste, ho pensato che sarebbe stato utile notare questo. – lascort

+0

Mongo è [open source] (https://github.com/mongodb), quindi puoi scavare nel [driver JS di cui sopra] (https://github.com/mongodb/node-mongodb-native) (se hai tempo) per vedere se riesci a capirlo =) – jadarnel27

risposta

2

Come ricordo in un ambiente NodeJS si deve fare qualcosa di simile per creare effettivamente un record: db.get('collectionName').insert({..something...}); o db.get('collectionName').save({...something...});, ma non si ottiene per utilizzare il nome della raccolta come una proprietà di db.

La linea menzionata viene utilizzata solo nella shell MongoDB, che non è Javascript. Immagino tu stia fraintendendo cosa sia la shell MongoDB e cosa sia un driver MongoDB.

In breve, MongoDB (driver) non è in grado di accedere a una proprietà non definita.

EDIT

In risposta al tuo commento ..

pagina GitHub di

MongoDB JS conducente fa praticamente fuori come inserire un campo e sempre utilizza la sintassi che ho citato: https://github.com/mongodb/node-mongodb-native

Come per quello che stai usando nella shell è abbastanza chiaro che non puoi semplicemente usare Javascript in una shell di comando. Quindi immagino che ti indicherò un posto in cui puoi vedere in quale lingua è stato sviluppato MongoDB: http://www.mongodb.org/ praticamente la prima riga dice che è scritta in C++.

Spero che questo aiuti a chiarire la tua domanda

+0

Sì e la risposta sembra un'estensione del tuo commento sulla mia domanda. Grazie molto. se possibile puoi per favore riferirmi a qualsiasi link che citi lo stesso. – dopeddude

+0

@DopedDude controlla la modifica – lascort

+0

Sì, questo ha aiutato .. Grazie. – dopeddude

5

In JavaScript esiste un modo per definire una funzione che verrà eseguita quando viene chiamato un metodo non definito.

Esempio:

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() 

Nota questa è una caratteristica non standard e oggi funziona solo in Firefox.

Non so come MongoDB abbia implementato questa funzione, ma sto solo rispondendo per segnalare che si può fare in questo modo.

Fot maggiori dettagli si veda: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod

+2

FYI, MongoDB 2.4+ utilizza il [motore JavaScript V8] (http: //docs.mongodb.org/manuale/release-notes/2,4-javascript /). – Stennie