Mongoose - Tên bộ sưu tập Force


120

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

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 để buộc tên bộ sưu tập trong mongoose?


14
Sự thật thú vị: cầy mangut biết rằng số nhiều của ox là bò, nhưng không phải số nhiều của ngỗng là ngỗng.
Sean Letendre

Câu trả lời:


201

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

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

Xem liên kết này từ tài liệu Mongoose để biết thêm thông tin.


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

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

Điều này rất hữu ích. Tôi đã dành hai ngày để cố gắng truy vấn một cái gì đó ngay bây giờ.
Holt Mansfield

79

Nếu bạn đang sử dụng mongoose 2.0.0, hãy chuyển collectionName làm đối số thứ ba

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

Cách hoàn hảo để khai báo tên bộ sưu tập tùy chỉnh ở cấp độ của mô hình.
tezqa

25

Mongoose sẽ thêm 's' vào tên bộ sưu tập theo mặc định. Nếu bạn muốn tránh điều đó, chỉ cần chuyển đố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();

1
Đây là gợi ý tốt nhất. Tôi luôn thấy rằng việc chuyển tên bộ sưu tập vào mongoose.model () là điều dễ dàng nhất. Cũng tốt cho việc chỉ ra cách mongoose đa nguyên hóa tên bộ sưu tập, điều này đã gây nhầm lẫn khi tôi mới bắt đầu.
John Morrison,

14

Cấu trúc API của mongoose.model là:

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

Điều mà mongoose làm là, Khi không có đối số tập hợp nào được chuyển qua, Mongoose tạo ra một tên tập hợp bằng cách tổng hợp 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.

Thí dụ:

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

hoặc là

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

hoặc là

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

11

Bạn cần đặt tên bộ sưu tập trong lược đồ của mình.

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


1

Câu trả lời:

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

Giải thích tốt hơn với cú pháp:

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

Giải thích thông số:

  • Tham số đầu tiên - tên kiểu máy
  • Tên giản đồ [schema] tham số thứ 2
  • Thông số thứ 3 [bộ sưu tập] tên bộ sưu tập (tùy chọn, lấy từ tên kiểu máy)
  • Tham số thứ 4 [skipInit] có bỏ qua quá trình khởi tạo hay không (mặc định là false)

0

tên kiểu máy của bạn: userInfo.js

trong tệp tuyến nhanh hoặc app.js

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

thì trong userInfo.js của bạn

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.