Mungo - Force Sammlungsname

120

Ich versuche, mit Mungo eine Datenbank und eine Sammlung darin zu erstellen. Mein Code lautet:

var mongoose = require('mongoose');
    var db = mongoose.connect('mongodb://localhost/testdb');
    var Schema = mongoose.Schema;

    var UserInfo = new Schema({
    username : String,
    password : String 
    });

    mongoose.model('UserInfo', UserInfo);

    var user = db.model('UserInfo');


    var admin = new user();
    admin.username = "sss";
    admin.password = "ee";
    admin.save();

Wenn ich diesen Code ausführe, hat Mungo eine Sammlung mit dem Namen UserInfo anstelle von userinfo erstellt. Wie erzwinge ich den Sammlungsnamen im Mungo?

Ravi
quelle
14
Lustige Tatsache: Mungo weiß, dass der Plural von Ochsen Ochsen ist, aber nicht, dass der Plural von Gänsen Gänse sind.
Sean Letendre

Antworten:

200

Das sollte es tun

var UserInfo = new Schema({
  username : String,
  password : String 
}, { collection: 'userinfo' });

Weitere Informationen finden Sie unter diesem Link in der Mongoose-Dokumentation.

Thomas Blobaum
quelle
7
Danke dafür. Hier ist der relevante Link: mongoosejs.com/docs/guide.html#collection
Jon Seite
2
Dank @JonPage habe ich mich gefragt, warum meine Sammlung von Personenobjekten als Personen benannt wurde. Der von Ihnen angegebene Link ist eine gute Referenz. Ich denke, diese Methode zum Festlegen eines benutzerdefinierten Sammlungsnamens beim Erstellen eines Schemas ist besser als die andere Methode zum Definieren eines Sammlungsnamens beim Erstellen des Modells.
Bharat
Das war super hilfreich. Ich habe zwei Tage lang versucht, etwas abzufragen.
Holt Mansfield
79

Wenn Sie Mungo 2.0.0 verwenden, übergeben Sie den Sammlungsnamen als drittes Argument

mongoose.model('UserInfo', UserInfo, 'UserInfo');
Bilal Husain
quelle
Perfekte Möglichkeit, einen benutzerdefinierten Sammlungsnamen auf Modellebene zu deklarieren.
Tezqa
25

Mongoose fügt dem Sammlungsnamen standardmäßig 's' hinzu. Wenn Sie dies vermeiden möchten, übergeben Sie einfach als drittes Argument den Namen der Sammlung:

var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/testdb');
var Schema = mongoose.Schema;

var UserInfo = new Schema({
    username: String,
    password: String 
});

mongoose.model('UserInfo', UserInfo, 'UserInfo')

tan = new user();
admin.username = 'sss';
admin.password = 'ee';
admin.save();
Vijay Kumar
quelle
1
Dies ist der beste Vorschlag. Ich fand es immer am einfachsten, den Sammlungsnamen einfach in mongoose.model () zu übergeben. Auch gut, um darauf hinzuweisen, wie Mungo den Sammlungsnamen pluralisiert, was zu Beginn verwirrend war.
John Morrison
14

Die API-Struktur von mongoose.model lautet wie folgt:

Mongoose#model(name, [schema], [collection], [skipInit])

Was Mungo tut, ist, dass Mongoose, wenn kein Sammlungsargument übergeben wird, einen Sammlungsnamen durch Pluralisieren des Modellnamens erzeugt. Wenn Ihnen dieses Verhalten nicht gefällt, übergeben Sie entweder einen Sammlungsnamen oder legen Sie die Option Name der Schemasammlung fest.

Beispiel:

var schema = new Schema({ name: String }, { collection: 'actor' });

oder

schema.set('collection', 'actor');

oder

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);
Sam
quelle
11

Sie müssen den Sammlungsnamen in Ihrem Schema festlegen.

new Schema({...},{collection: 'userInfo'});
James Freund
quelle
9

Mungo-Betreuer hier. Wir empfehlen dies zu tun mongoose.model('UserInfo', UserInfo, 'UserInfo');. Das dritte Argument mongoose.model()ist der Name der Sammlung. Hier sind die relevanten Dokumente .

vkarpov15
quelle
1

Antworten:

mongoose.model('UserInfo', UserInfo, 'userinfo'); //3rd parameter 'userinfo': as collection name

Bessere Erklärung mit Syntax:

Mongoose.model(name, [schema], [collection], [skipInit])

Parameter Erläuterung:

  • 1. Parameter - Name Modellname
  • 2. Parameter [Schema] Schemaname
  • 3. Parameter [Sammlung] Sammlungsname (optional, induziert vom Modellnamen)
  • 4. Parameter [skipInit], ob die Initialisierung übersprungen werden soll (standardmäßig false)
Bijay Pal
quelle
0

Ihr Modellname: userInfo.js

in Expressroutendatei oder app.js.

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb');

dann in Ihrer userInfo.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Shyam Kumar Nallaguntla
quelle