Mangusta: forza il nome della raccolta


120

Sto cercando di utilizzare la mangusta per creare un database e una raccolta al suo interno. Il mio codice è:

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

Quando eseguo questo codice, mongoose ha creato una raccolta denominata UserInfo invece di userinfo. Come forzare il nome della raccolta in mangusta?


14
Curiosità: la mangusta sa che il plurale di bue è bue, ma non che il plurale di oca sia oche.
Sean Letendre

Risposte:


201

Questo dovrebbe bastare

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

Vedere questo collegamento dalla documentazione di Mongoose per ulteriori informazioni.


7
Grazie per questo. Ecco il link pertinente: mongoosejs.com/docs/guide.html#collection
Jon Page

2
Grazie @JonPage, mi chiedevo perché la mia raccolta di oggetti Person fosse denominata come persone. Il link che hai fornito è un buon riferimento. Penso che questo metodo per impostare un nome di raccolta personalizzato durante la creazione di uno schema sia migliore dell'altro metodo per definire un nome di raccolta durante la creazione del modello.
Bharat

Questo è stato di grande aiuto. Ho passato due giorni cercando di interrogare qualcosa adesso.
Holt Mansfield,

79

Se stai usando mongoose 2.0.0, passa il collectionName come terzo argomento

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

Modo perfetto per dichiarare un nome di raccolta personalizzato a livello di modello.
tezqa

25

Mongoose aggiungerà "s" al nome della raccolta per impostazione predefinita. Se vuoi evitarlo, passa come terzo argomento il nome della raccolta:

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
Questo è il miglior suggerimento. Ho sempre trovato più facile passare il nome della raccolta in mongoose.model (). Ottimo anche per sottolineare come la mangusta pluralizza il nome della raccolta, che era fonte di confusione quando ho iniziato.
John Morrison

14

La struttura API di mongoose.model è questa:

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

Quello che fa la mangusta è che, quando non viene passato alcun argomento di raccolta, Mongoose produce un nome di raccolta pluralizzando il nome del modello. Se non ti piace questo comportamento, passa un nome di raccolta o imposta l'opzione per il nome della raccolta di schemi.

Esempio:

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

o

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

o

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

11

Devi impostare il nome della raccolta nel tuo schema.

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

9

Manutentore di Mongoose qui. Ti consigliamo di farlo mongoose.model('UserInfo', UserInfo, 'UserInfo');, il terzo argomento per mongoose.model()è il nome della raccolta. Ecco i documenti pertinenti .


1

Risposta:

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

Migliore spiegazione con la sintassi:

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

Spiegazione dei parametri:

  • 1 ° parametro - nome nome modello
  • 2 ° parametro [schema] nome schema
  • 3 ° parametro [raccolta] nome della raccolta (opzionale, indotto dal nome del modello)
  • 4 ° parametro [skipInit] se saltare l'inizializzazione (il valore predefinito è false)

0

il nome del modello: userInfo.js

nel file di percorso espresso o app.js

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

quindi nel tuo userInfo.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.