时间:2021-05-20
前言
一直没实际用过MongoDB,最近有个项目中用了用,踩了一些坑。这篇文章会介绍将MongoDB->RunCommand结果映射到业务类时碰到的问题,以及对各种方法的探索。
Collection中的数据是这样的:
使用find命令查询数据:
db.runCommand({"find":"test", limit:2, sort:{AddTime:-1}})查询返回的数据结构是这样的,需要的数据在firstBatch中:
{ "cursor" : { "firstBatch" : [ { "_id" : ObjectId("5ad0042944fd3929db6b869f"), "Name" : "李四", "AddTime" : ISODate("2018-04-12T01:13:18.965Z") }, { "_id" : ObjectId("5ad003e844fd3929db6b869e"), "Name" : "张三", "AddTime" : ISODate("2018-04-02T01:11:18.965Z") } ], "id" : NumberLong(0), "ns" : "test.test" }, "ok" : 1.0}下面将在C#中运行find命令来执行查询,并将结果映射到自定义的PersonInfo类。
private class PersonInfo { public string Id { get; set; } public string Name { get; set; } public DateTime AddTime { get; set; } }需要注意PersonInfo中的属性Id和Document中的名称_id有些不一样,需要进行映射。因为不同的反序列化方法,采用的方式也会不同,所以下面会有相关介绍。
使用Json.NET
因为Json.NET用的比较多,基本思路就是用它来反序列化Bson,但是Json和Bson是不同的,不能用JsonConvert。
不过Json.NET提供了一个新的包Newtonsoft.Json.Bson来解析Bson数据,并且提供了一个例子。
https://mand) .GetElement("cursor").Value.ToBsonDocument() .GetElement("firstBatch").Value.AsBsonArray.Select(d => { var dbd = d.AsBsonDocument; return new PersonInfo() { Id = dbd.GetElement("_id").Value.AsObjectId.ToString(), AddTime = dbd.GetElement("AddTime").Value.ToLocalTime(), Name = dbd.GetElement("Name").Value.ToString(), }; }).ToList();
运行后直接返回List<PersonInfo> ,更贴近业务需求。
这是本文中最简单的方式了。
如果做的更通用点,可以在这里通过反射自动实例化相关类型,不过这不如直接使用SDK内置的反序列化方式了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
总结一下如何将mongoDB安装为WinXP下系统服务。使用的命令如下:复制代码代码如下:MicrosoftWindowsXP[版本5.1.2600](C)版权
项目中需要根据不同业务进行分库,首先是将业务不同业务映射到不同过的数据库(biz-->db,可能存在多对一情况),查看springjdbc源码发现Abstrac
Map简介将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代Dictionary类,后者完全是一个抽象类,而不是一个接口。 M
本文实例讲述了C#中数组初始化与数组元素复制的方法。分享给大家供大家参考。具体如下:下面的代码演示如何创建和初始化数组,以及C#中如何将数组元素从一个复制到另外
Map简介将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代Dictionary类,后者完全是一个抽象类,而不是一个接口。 M