What are naming conventions for MongoDB?

MongodbNaming Conventions

Mongodb Problem Overview


Is there a set of preferred naming conventions for MongoDB entitites such as databases, collections, field names?

I was thinking along these lines:

  • Databases: consist of the purpose (word in singular) and end with “db” – all lower case: imagedb, resumedb, memberdb, etc.
  • Collections: plural in lower case: images, resumes,
  • Document fields: lowerCamelCase, e.g. memberFirstName, fileName, etc

Mongodb Solutions


Solution 1 - Mongodb

  1. Keep'em short: Optimizing Storage of Small Objects, SERVER-863. Silly but true.

  2. I guess pretty much the same rules that apply to relation databases should apply here. And after so many decades there is still no agreement whether RDBMS tables should be named singular or plural...

  3. MongoDB speaks JavaScript, so utilize JS naming conventions of camelCase.

  4. MongoDB official documentation mentions you may use underscores, also built-in identifier is named _id (but this may be be to indicate that _id is intended to be private, internal, never displayed or edited.

Solution 2 - Mongodb

DATABASE

  • camelCase
  • append DB on the end of name
  • make singular (collections are plural)

MongoDB states a nice example:

> To select a database to use, in the mongo shell, issue the use <db> > statement, as in the following example: > > use myDB
> use myNewDB

Content from: https://docs.mongodb.com/manual/core/databases-and-collections/#databases

COLLECTIONS

> - Lowercase names: avoids case sensitivity issues, MongoDB collection names are case sensitive. >
> - Plural: more obvious to label a collection of something as the plural, e.g. "files" rather than "file" >
> - >No word separators: Avoids issues where different people (incorrectly) separate words (username <-> user_name, first_name <->
> firstname). This one is up for debate according to a few people
> around here but provided the argument is isolated to collection names > I don't think it should be ;) If you find yourself improving the
> readability of your collection name by adding underscores or
> camelCasing your collection name is probably too long or should use
> periods as appropriate which is the standard for collection
> categorization. >
> - Dot notation for higher detail collections: Gives some indication to how collections are related. For example you can be > reasonably sure you could delete "users.pagevisits" if you deleted > "users", provided the people that designed the schema did a good > job. > > Content from: https://web.archive.org/web/20190313012313/http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

For collections I'm following these suggested patterns until I find official MongoDB documentation.

Solution 3 - Mongodb

Even if no convention is specified about this, manual references are consistently named after the referenced collection in the Mongo documentation, for one-to-one relations. The name always follows the structure <document>_id.

For example, in a dogs collection, a document would have manual references to external documents named like this:

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

This follows the Mongo convention of naming _id the identifier for every document.

Solution 4 - Mongodb

Naming convention for collection

In order to name a collection few precautions to be taken :

  1. A collection with empty string (“”) is not a valid collection name.
  2. A collection name should not contain the null character because this defines the end of collection name.
  3. Collection name should not start with the prefix “system.” as this is reserved for internal collections.
  4. It would be good to not contain the character “$” in the collection name as various driver available for database do not support “$” in collection name.

Things to keep in mind while creating a database name are :

  1. A database with empty string (“”) is not a valid database name.
  2. Database name cannot be more than 64 bytes.
  3. Database name are case-sensitive, even on non-case-sensitive file systems. Thus it is good to keep name in lower case.
  4. A database name cannot contain any of these characters “/, , ., “, *, <, >, :, |, ?, $,”. It also cannot contain a single space or null character.

For more information. Please check the below link : http://www.tutorial-points.com/2016/03/schema-design-and-naming-conventions-in.html

Solution 5 - Mongodb

I think it's all personal preference. My preferences come from using NHibernate, in .NET, with SQL Server, so they probably differ from what others use.

  • Databases: The application that's being used.. ex: Stackoverflow
  • Collections: Singular in name, what it's going to be a collection of, ex: Question
  • Document fields, ex: MemberFirstName

Honestly, it doesn't matter too much, as long as it's consistent for the project. Just get to work and don't sweat the details :P

Solution 6 - Mongodb

Until we get SERVER-863 keeping the field names as short as possible is advisable especially where you have a lot of records.

Depending on your use case, field names can have a huge impact on storage. Cant understand why this is not a higher priority for MongoDb, as this will have a positive impact on all users. If nothing else, we can start being more descriptive with our field names, without thinking twice about bandwidth & storage costs.

Please do vote.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAndreyView Question on Stackoverflow
Solution 1 - MongodbTomasz NurkiewiczView Answer on Stackoverflow
Solution 2 - MongodbBBi7View Answer on Stackoverflow
Solution 3 - MongodbdanzaView Answer on Stackoverflow
Solution 4 - MongodbShrinivas KalangutkarView Answer on Stackoverflow
Solution 5 - MongodbRex MorganView Answer on Stackoverflow
Solution 6 - MongodbFlappySocksView Answer on Stackoverflow