- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 mongodb 的新手,我喜欢不用担心模式的东西是多么容易,我有一个问题假设你想在 mongo 中有一个 Id 属性,而 mongo 使用 ObjectId
来表示属性 Id,所以到目前为止,我看到您可以按如下方式拥有或装饰一个 Id,
public ObjectId Id {get; set;}
//or
[BsonId]
public string Id {get; set;}
//or
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id {get; set;}
任何人都可以向我解释为什么大多数人选择最后一种类型,这是怎么回事以及灵 active 有何帮助。谢谢?
最佳答案
TDocument
类(集合中的项目类型)中有一个名为 Id、id 或 _id
的列,则名为 "_id"
将在 Mongo 中生成。它还将为该列创建一个索引。如果尝试插入一个键已经存在的项目,您会得到一个duplicate key error
异常。public ObjectId Id {get; set;}
将为 ObjectId
使用类型生成器,它看起来像
_id: ObjectId("57ade20771e59f422cc652d9")
同样:
public Guid _id { get; set; }
将使用 Guid 生成器生成类似的东西
"_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==")
还有以下所有属性
public int Id { get; set; }
public string id { get; set; }
public byte[] _id { get; set; }
如果未指定,将使用每种类型的默认值作为索引列。
[BsonId]
让您可以灵活地以任何您想要的方式命名该索引。这两个都是索引:
[BsonId]
public Guid SmthElseOtherThanId { get; set; }
[BsonId]
public string StringId { get; set; }
然而;
public Guid SmthElseOtherThanId { get; set; }
public string StringId { get; set; }
不会是索引,mongodb 仍然会在内部使用 _id
。
同样的逻辑,
public ObjectId SmthElseOtherThanId {get; set;}
没有 [BsonId]
装饰不会成为索引列。
[BsonRepresentation]
允许您处理 Mongo 类型与内部 .Net 类型,如果它们之间存在转换。拥有
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public ObjectId Id { get; set; }
等同于:
public ObjectId Id { get; set; }
但是,
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
是不同的。 Mongo 会自动生成对象 ID,但是您可以在 .net 中使用字符串、过滤查询等,因为对象 ID 和字符串之间存在转换。
拥有
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public byte[] Id { get; set; }
或
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public int Id { get; set; }
将失败并返回 ObjectId not a valid representation for a ByteArraySerializer/Int32Serializer
消息。
但是
[BsonId]
[BsonRepresentation(BsonType.String)]
public int StringId { get; set; }
会很好的。
关于c# - 使用 BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId 在 C# 中装饰属性的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871416/
我无法使用 MongoDB csharp 官方库获取模型的 ObjectId 以返回值。当我提交回传给 Controller 的表单时,PageID 总是在模型中返回 {000000000000000
我可以在基类中使用 Id 属性,但是当我不想在派生类中执行此操作时,我会收到错误消息“类型为‘ConsoleApp1.DerivedWithId’的属性‘Id’无法使用元素名称'_id' 因为它已被类
我已经研究过这个话题,但仍然无法得到结论性的答案。我想知道最好将 mongodb _id (BsonObj) 替换为和 Auto Inc intger 自从我阅读了here将 _id 替换为 auto
我有这样一个类: public class MyClass { [BsonId] public Guid MyId { get; private set; } // some
我是 mongodb 的新手,我喜欢不用担心模式的东西是多么容易,我有一个问题假设你想在 mongo 中有一个 Id 属性,而 mongo 使用 ObjectId 来表示属性 Id,所以到目前为止,我
我是一名优秀的程序员,十分优秀!