在MongoDB中将Guid存储为字符串有哪些缺点?
应用程序在Mongo中保留Guid字段,并最终将其存储为BinData:在MongoDB中将Guid存储为字符串有哪些缺点?,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,应用程序在Mongo中保留Guid字段,并最终将其存储为BinData: "_id" : new BinData(3, "WBAc3FDBDU+Zh/cBQFPc3Q==") 这种情况下的优点是紧凑性,缺点在需要对应用程序进行故障排除时表现出来。guid是通过url传递的,当转到Mongo控制台时,不断地将它们转换为BinData有点痛苦 除了增加大小外,将Guid存储为字符串还有哪些缺点?一个优点是易于进行故障排除: "_id" : "3c901cac-5b90-4a09-896c-00e4
"_id" : new BinData(3, "WBAc3FDBDU+Zh/cBQFPc3Q==")
这种情况下的优点是紧凑性,缺点在需要对应用程序进行故障排除时表现出来。guid是通过url传递的,当转到Mongo控制台时,不断地将它们转换为BinData有点痛苦
除了增加大小外,将Guid存储为字符串还有哪些缺点?一个优点是易于进行故障排除:
"_id" : "3c901cac-5b90-4a09-896c-00e4779a9199"
下面是C#中持久实体的原型:
缺点是mongodb被优化为使用BSON ObjectID,因此使用字符串作为ObjectID的效率会稍低一些。此外,如果您想对字符串对象使用基于范围的查询,那么将使用字典比较,这可能会给出与您预期不同的结果。除此之外,还可以使用字符串作为objectid。 请参见优化对象
除了gregor的答案之外,使用GUI目前将阻止使用新的聚合框架,因为它被表示为二进制类型。不管怎样,你可以用一种更简单的方式做你想做的事情。这将让mongodb bson库为您处理转换
public class MyClass
{
[BsonRepresentation(BsonType.String)]
public Guid Id { get; set;}
}
内存、空间、查询时间和索引大小都有一些,您可以做的是优化:这就是您实际在做的事情,抱歉没有完全阅读问题。您可能需要检查我的相关问题的答案:我可以使用例如BsonString作为变量的类型,比如'public BsonString Name{get;set;}只是为了注意,这不再是2.6中聚合框架的问题。@Idan,不要在类中使用BsonString,请使用字符串。驱动程序知道如何在这些文件之间进行序列化。我不认为在服务器2.6中没有这种限制。现在聚合框架可以使用guid了。
public class MyClass
{
[BsonRepresentation(BsonType.String)]
public Guid Id { get; set;}
}