พังพอน - ชื่อคอลเลกชันบังคับ


120

ฉันพยายามใช้พังพอนเพื่อสร้างฐานข้อมูลและคอลเล็กชันในนั้น รหัสของฉันคือ:

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

เมื่อฉันรันโค้ดนี้พังพอนสร้างคอลเล็กชันชื่อ UserInfo แทน userinfo วิธีการบังคับชื่อคอลเลกชันในพังพอน?


14
ข้อเท็จจริงที่น่าสนใจ: พังพอนรู้ว่าพหูพจน์ของวัวคือวัว แต่ไม่ใช่ว่าพหูพจน์ของห่านคือห่าน
Sean Letendre

คำตอบ:


201

สิ่งนี้ควรทำ

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

ดูลิงค์นี้จากเอกสาร Mongoose สำหรับข้อมูลเพิ่มเติม


7
ขอบคุณสำหรับสิ่งนี้. นี่คือลิงค์ที่เกี่ยวข้อง: mongoosejs.com/docs/guide.html#collection
Jon Page

2
ขอบคุณ @JonPage ฉันสงสัยว่าทำไมคอลเล็กชันวัตถุบุคคลของฉันจึงถูกตั้งชื่อเป็นบุคคล ลิงก์ที่คุณให้ไว้เป็นข้อมูลอ้างอิงที่ดี ฉันคิดว่าวิธีการตั้งชื่อคอลเลกชันที่กำหนดเองนี้เมื่อสร้างสคีมาดีกว่าวิธีอื่นในการกำหนดชื่อคอลเลกชันเมื่อสร้างโมเดล
Bharat

สิ่งนี้มีประโยชน์มาก ฉันใช้เวลาสองวันในการพยายามค้นหาบางสิ่งในตอนนี้
Holt Mansfield

79

ถ้าคุณกำลังใช้ mongoose 2.0.0 ให้ส่ง collectionName เป็นอาร์กิวเมนต์ที่สาม

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

วิธีที่สมบูรณ์แบบในการประกาศชื่อคอลเลคชันที่กำหนดเองในระดับของโมเดล
tezqa

25

พังพอนจะเพิ่ม 's' ในชื่อคอลเลคชันตามค่าเริ่มต้น หากคุณต้องการหลีกเลี่ยงสิ่งนั้นให้ส่งผ่านอาร์กิวเมนต์ที่สามชื่อของคอลเล็กชัน:

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
นี่คือคำแนะนำที่ดีที่สุด ฉันพบว่ามันง่ายที่สุดที่จะส่งชื่อคอลเลกชันใน mongoose.model () ยังดีสำหรับการชี้ให้เห็นว่าพังพอนทำให้ชื่อคอลเลกชันเป็นพหูพจน์ได้อย่างไรซึ่งทำให้สับสนเมื่อฉันเริ่มครั้งแรก
John Morrison

14

โครงสร้าง API ของพังพอนโมเดลคือ:

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

สิ่งที่พังพอนทำก็คือเมื่อไม่มีการส่งผ่านอาร์กิวเมนต์คอลเลกชันพังพอนจะสร้างชื่อคอลเลกชันโดยการทำให้ชื่อรุ่นเป็นพหูพจน์ หากคุณไม่ชอบพฤติกรรมนี้ให้ส่งชื่อคอลเลกชันหรือตั้งค่าตัวเลือกชื่อคอลเล็กชันสกีมาของคุณ

ตัวอย่าง:

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

หรือ

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

หรือ

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


9

ผู้ดูแลพังพอนที่นี่ เราขอแนะนำให้ทำmongoose.model('UserInfo', UserInfo, 'UserInfo');อาร์กิวเมนต์ที่สามmongoose.model()คือชื่อคอลเล็กชัน นี่คือเอกสารที่เกี่ยวข้อง


1

ตอบ:

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

คำอธิบายที่ดีขึ้นด้วยไวยากรณ์:

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

คำอธิบายพารามิเตอร์:

  • พารามิเตอร์ที่ 1 - ชื่อรุ่นชื่อ
  • พารามิเตอร์ที่ 2 [schema] ชื่อสคีมา
  • ชื่อคอลเลคชันพารามิเตอร์ที่ 3 [คอลเลกชัน] (เป็นทางเลือกที่เกิดจากชื่อรุ่น)
  • พารามิเตอร์ที่ 4 [skipInit] ว่าจะข้ามการเริ่มต้นหรือไม่ (ค่าเริ่มต้นเป็นเท็จ)

0

ชื่อรุ่นของคุณ: userInfo.js

ในไฟล์เส้นทางด่วนหรือ app.js

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

จากนั้นใน userInfo.js ของคุณ

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

0

ส่งผ่านอาร์กิวเมนต์ที่สามในการmodule.exports = mongoose.model('name', schema, 'collection')แทนที่ชื่อคอลเลกชันอัตโนมัติตามชื่อรุ่นซึ่งได้รับคำตอบแล้ว .. แต่มีอีก 2 วิธี

ต่อพังพอนลิงค์รุ่น doco: https://mongoosejs.com/docs/api.html#mongoose_Mongoose-model

มี 3 วิธีในการป้อนชื่อคอลเลกชันด้วยตนเอง:

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

// or

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

// or

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.