Tôi muốn biết nếu có một quy ước cho các bộ sưu tập cơ sở dữ liệu như:
PageVisit
hoặc page_visit
.
Có bất kỳ lợi thế / bất lợi cho các ký hiệu này?
Câu trả lời:
Các quy ước chung là:
Ví dụ:
users
pagevisits
users.pagevisits
Các quy ước về tên trường (nên) tuân theo một số logic tương tự mặc dù các quy ước về tên trường là khá phổ biến.
Chỉ cần tránh sử dụng dấu gạch ngang trong tên bộ sưu tập của bạn.
Và đó chỉ bởi vì, nếu bạn sử dụng cli của hai lệnh gọi dưới đây, thì lệnh đầu tiên là JavaScript không hợp lệ:
db.foo-bar.find();
db['foo-bar'].find();
Cả hai đều giống hệt nhau về chức năng, nhưng thứ hai hơi khó chịu hơn khi nhập và không hoàn thành tab.
Ngoài ra, lợi thế / bất lợi phụ thuộc vào việc bạn sử dụng các bộ sưu tập. Nhất quán quan trọng hơn quy ước bạn chọn.
:
hợp lệ cho tên bộ sưu tập không gian tên, như trong foo:bar
không?
db["\n"].insert({});
- không có lỗi. Những điều cần quan tâm chủ yếu là sự thuận tiện với trình điều khiển bạn đang sử dụng.
Trong http://docs.mongodb.org/manual/reference/limits/ , hướng dẫn sử dụng quy định rằng tên bộ sưu tập phải bắt đầu bằng dấu gạch dưới ('_') hoặc ký tự chữ cái và không được:
- chứa $.
- là một chuỗi rỗng (ví dụ: "").
- chứa ký tự null.
- bắt đầu với hệ thống. tiếp đầu ngữ. (Dành riêng cho việc sử dụng nội bộ.)
Tuy nhiên, nếu bạn tuân theo quy tắc và tạo một bộ sưu tập với '_' là chữ cái đầu, chẳng hạn như "_TWII", bạn sẽ gặp rắc rối khi muốn bỏ bộ sưu tập. Hãy xem bài kiểm tra bên dưới và cách khắc phục. Bộ sưu tập '_TWII' đã được tạo trong db 'people'.
> show collections
_TWII
employees
system.indexes
> db._TWII.drop()
2015-02-19T16:34:56.738-0800 TypeError: Cannot call method 'drop' of undefined
> use admin
switched to db admin
> db.runCommand({renameCollection:"people._TWII",to:"people.TWII"})
{ "ok" : 1 }
> use people
switched to db people
> show collections
TWII
employees
system.indexes
> db.TWII.drop()
true
> show collections
employees
system.indexes
>
Một đoạn ngắn để xóa bộ sưu tập _TWII khi ở dưới db 'people':
> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true
MongoDB có một số quy ước đặt tên. Một trong số đó là tên cơ sở dữ liệu không phân biệt chữ hoa chữ thường. Ngoài ra, mongo sẽ đặt tên bộ sưu tập của bạn ở số nhiều nếu không được chỉ định. "khóa học" sẽ trở thành "các khóa học".
Vì tên cơ sở dữ liệu không phân biệt chữ hoa chữ thường trong MongoDB, tên cơ sở dữ liệu không thể chỉ khác nhau theo trường hợp của các ký tự.
Vì chúng, hãy cố gắng đặt tên cho tất cả bộ sưu tập của bạn bằng chữ thường và không có ký tự đặc biệt. Bạn sẽ tránh được nhiều lỗi - đặc biệt nếu bạn sử dụng Mongoose. Mongoose có một số đặc điểm truy vấn kỳ lạ.
Ví dụ: nếu bạn có một bộ sưu tập có tên "các khóa học", đây là cách bạn cần cấu trúc mô hình của mình:
const LawModel = mongoose.model(
"course",
new mongoose.Schema({
id: String,
name: String,
}),
Lưu ý "khóa học" là số ít như thế nào? Mongoose sẽ ở số nhiều, do đó tại sao bạn có thể thấy một mảng trống "[]". -> bạn đang truy vấn một bộ sưu tập chưa tồn tại.
Hãy thử đổi tên và điều chỉnh mô hình của bạn.