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?


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.


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');

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

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

11

Sie müssen den Sammlungsnamen in Ihrem Schema festlegen.

new Schema({...},{collection: 'userInfo'});


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)

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.