1.环境
使用的furion的包,配置这个就可以使用了,
算了,基础的集成不写了,还是看furion的文档吧,
2.数据
实体数据 有几个注意点
1.mongodb没有decimal类型,默认转string ,加上那个Attribute就没问题了,
2.一个是枚举存进去是int32类型 ,
3.添加一条数据就可以看出数据库中存的数据比实际数据少8个小时
4.
[BsonIgnoreExtraElements(Inherited = true)]
public class BaseEntity : IMongoDBEntity<long>
{
/// <summary>
/// 主键Id
/// </summary>
public virtual long Id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public virtual DateTime? CreatedTime { get; set; } = DateTime.Now;
}
public class Test : BaseEntity
{
[BsonRepresentation(BsonType.Double)]
public decimal Num { get; set; }
public DateTime? TestTime { get; set; } = DateTime.Now;
public List<EmbeddedDocument> embeddedDocuments { get; set; }
public string Name { get; set; }
}
public class EmbeddedDocument : BaseEntity
{
public EmbeddedEnum EmbeddedEnumType { get; set; }
public string Key { get; set; }
public string Value { get; set; }
}
public enum EmbeddedEnum
{
[Description("a")]
A = 1,
[Description("b")]
B
}
增
[Route("/Test")]
[ApiDescriptionSettings("Test", Name = "测试", Order = 100)]
public class TestService : IDynamicApiController, ITransient
{
private readonly IMongoDBRepository<Test, long> _testMongoRepository;
public TestService(IMongoDBRepository<Test, long> testMongoRepository)
{
_testMongoRepository = testMongoRepository;
}
[HttpPost("add")]
public async Task Add()
{
var test = new Test { Num = 22.22M, Name = "111" };
var emDocuments= new List<EmbeddedDocument>();
var emDocument1 = new EmbeddedDocument
{
Key = "key1",
Value = "value1",
EmbeddedEnumType = EmbeddedEnum.A,
};
var emDocument2 = new EmbeddedDocument
{
Key = "key2",
Value = "value2",
EmbeddedEnumType = EmbeddedEnum.B,
};
emDocuments.Add(emDocument1);
emDocuments.Add(emDocument2);
test.embeddedDocuments = emDocuments;
await _testMongoRepository.InsertAsync(test);
}
}
删 (根据id删除)
[HttpPost("delete")]
public async Task Delete()
{
long id = 200453425136140358L;
await _testMongoRepository.DeleteAsync(id);
}
改
/// <summary>
/// 修改
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("update")]
public async Task Update(Test test)
{
await _testMongoRepository.UpdateAsync(test);
}
查
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("list")]
public async Task<List<Test>> List()
{
return await _testMongoRepository.Entities.Find(a => a.Name == "111").SortByDescending(a => a.CreatedTime).ToListAsync();
}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("page")]
public async Task<MongoDBPagedList<Test>> Page()
{
var page = 1;
var pageSize = 10;
return await _testMongoRepository.Entities.Find(a => a.Name == "111").SortByDescending(a => a.CreatedTime).ToPagedListAsync(page, pageSize);
}
3.其他补充
[BsonIgnoreExtraElements(Inherited = true)]
在 MongoDB 中,如果一个文档包含了不在映射类中定义的字段,MongoDB 驱动程序默认会抛出MongoDB.Bson.BsonSerializationException
异常。这个异常的含义是文档中包含了额外的未知字段,而映射类并没有定义这些字段。
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
Kind
属性用于指定DateTime值的时间种类,可以是本地时间(DateTimeKind.Local
)、协调世界时(DateTimeKind.Utc
)或未指定(DateTimeKind.Unspecified
)。本地时间是指相对于计算机所在的时区的时间,协调世界时是指相对于全球的统一时间标准的时间。在Bson文档中,DateTime类型被存储为UTC时间。在将DateTime类型序列化为BsonDocument时,如果不指定Kind
属性,则默认为本地时间。在反序列化BsonDocument为实体类对象时,如果属性上使用了[BsonDateTimeOptions]
,则会按照Kind
属性的指定进行转换。
[BsonRepresentation(BsonType.Double)] 类型装换为double.,还可以转换其他的类型.
没有试过不是数字类型的字符串能不能转进去
4.结
最基本的一套增删改查就结束了,有时间来补嵌套文档的增删改查