Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are drawbacks of storing Guid as String in MongoDB?

An application persists Guid field in Mongo and it ends up being stored as BinData:

"_id" : new BinData(3, "WBAc3FDBDU+Zh/cBQFPc3Q==")

The advantage in this case is compactness, the disadvantage shows up when one needs to troubleshoot the application. Guids are passed via URLs, and constantly transforming them to BinData when going to Mongo console is a bit painful.

What are drawbacks of storing Guid as string in addition to increase in size? One advantage is ease of troubleshooting:

"_id" : "3c901cac-5b90-4a09-896c-00e4779a9199"

Here is a prototype of a persistent entity in C#:

class Thing
{
    [BsonIgnore]
    public Guid Id { get; set; }

    [BsonId]
    public string DontUseInAppMongoId
    {
        get { return Id.ToString(); }
        set { Id = Guid.Parse(value); }
    }
}
like image 703
Yuriy Zubarev Avatar asked Aug 13 '12 21:08

Yuriy Zubarev


People also ask

What is GUID MongoDB?

GUIDs are often being used to identify custom objects created in software. Software developers very often explicitly store those identifiers in the database and do not rely on identifiers generated by the database system. MongoDB and the MongoDB drivers come with built-in support for the GUID/UUID data type.

What is Luuid?

Acronym. Definition. LUUID. Log Unification Unique ID. Copyright 1988-2018 AcronymFinder.com, All rights reserved.


2 Answers

In addition to gregor's answer, using Guids will currently prevent the use of the new Aggregation Framework as it is represented as a binary type. Regardless, you can do what you are wanting in an easier way. This will let the mongodb bson library handle doing the conversions for you.

public class MyClass
{
  [BsonRepresentation(BsonType.String)]
  public Guid Id { get; set;}
}
like image 108
Craig Wilson Avatar answered Sep 28 '22 02:09

Craig Wilson


The drawbacks are that mongodb is optimised to use BSON ObjectID's so it will be slightly less efficient to use strings as ObjectID's. Also if you want to use range based queries on string ObjectIDs then a lexicographic compare will be used which may give different results than you expect. Other than that you can use strings as ObjectIDs. See Optimizing ObjectIDs http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs

like image 27
geakie Avatar answered Sep 28 '22 03:09

geakie