2011-09-20 30 views
83

Tôi đang cố gắng sử dụng mongoose để tạo cơ sở dữ liệu và bộ sưu tập trong đó. Mã của tôi là:Mongoose - Tên bộ sưu tập lực

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

Khi tôi chạy mã này, mongoose tạo bộ sưu tập có tên UserInfo thay vì userinfo. Làm thế nào để ép buộc tên bộ sưu tập ở mongoose?

Trả lời

135

này nên làm điều đó

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

Cảm ơn điều này. Đây là liên kết có liên quan: http://mongoosejs.com/docs/guide.html#collection –

+0

Cảm ơn @JonPage, tôi đã tự hỏi tại sao bộ sưu tập của tôi đối tượng Người được đặt tên là người. Liên kết bạn cung cấp là một tham chiếu tốt. Tôi nghĩ phương pháp thiết lập tên tập hợp tùy chỉnh này khi tạo lược đồ tốt hơn phương pháp xác định tên tập hợp khác khi tạo mô hình. – Bharat

54

Nếu bạn đang sử dụng mongoose 2.0.0, vượt qua collectionName như là đối số thứ ba

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

cũng làm việc cho mongoose 4.7.6 –

8

Bạn cần phải đặt tên bộ sưu tập trong lược đồ.

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

cấu trúc API của mongoose.model là thế này:

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

mongoose gì là, Khi không có tranh luận thu được thông qua, Mongoose tạo ra một tên bộ sưu tập bởi pluralizing tên mô hình. Nếu bạn không thích hành vi này, hãy chuyển tên bộ sưu tập hoặc đặt tùy chọn tên bộ sưu tập lược đồ của bạn.

Ví dụ:

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

hoặc

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

hoặc

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

mongoose sẽ thêm 's' đến tên bộ sưu tập theo mặc định. Nếu bạn muốn tránh rằng chỉ cần vượt qua đối số thứ ba là tên của bộ sưu tập

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

Đây là gợi ý tốt nhất. Tôi đã luôn luôn tìm thấy nó dễ dàng nhất để chỉ cần vượt qua tên bộ sưu tập trong mongoose.model(). Cũng tốt cho chỉ ra làm thế nào mongoose pluralizes tên bộ sưu tập, đó là khó hiểu khi tôi lần đầu tiên bắt đầu. –

Các vấn đề liên quan