Tag: mongodb

使用NoSQL API的ORM是多余的吗?

使用MongoDB(我假设其他NoSQL数据库API值得他们的盐)查询数据库的方式比SQL简单得多。 没有繁琐的SQL查询可以生成等等。 例如,从mongodb-csharp获取: using MongoDB.Driver; Mongo db = new Mongo(); db.Connect(); //Connect to localhost on the default port. Document query = new Document(); query[“field1”] = 10; Document result = db[“tests”][“reads”].FindOne(query); db.Disconnect(); ORM怎么能简化呢? 在一个体面的NoSQL API之上是否需要ORM或其他“数据库抽象设备”?

使用MongoDB C#Driver反序列化多态类型

假设,我有一个基类 public class Node{ public ObjectId Id; public String nodeName; public ObjectId parentNode; } 和2个派生类 public class PlotNode:Node{ public ObjectId Id; public String plotDetail; } public class EndNode:Node{ public ObjectId Id; public int resultCode; } 序列化的所有3个类的几个对象都在数据库中。 并且只有我拥有的数据是ObjectId的列表,并且只有这些ID的知识是它们肯定是Node ids,但是它们在反序列化时间内不知道它们是Node,PlotNode还是EndNode。 我用它来反序列化: var collection = db.GetCollection(“nodes”); var query = Query.EQ(e => e.Id, id); Node node = collection.FindOne(query); 最后我得到节点,而不是实际的PlotNodes或EndNodes。 […]

Mongo C#驱动程序:反序列化BsonValue

我在mongodb中有一个文档,结构类似于: { “_id”: “abcdef01234”, “Name”: “Product A”, “Dimensions”: [ { “Height”: 32, “Width”: 64 }, { “Height”: 16, “Width”: 32 }, { “Height”: 8, “Width”: 16 } ] } 我还有一个定义为表示维度的类(上面的子文档) public class Dimension { public int Height { get; set; } public int Width { get; set; } } 我以这种方式选择“产品A”文档: MongoServer srv = MongoServer.Create(myConnStr); BsonDocument […]

将.NET Guid转换为MongoDB ObjectID

如何将.NET GUID转换为MongoDB ObjectID(在C#中)。 另外,我可以将它再次转换回ObjectID中的相同GUID吗?

Azure上的MongoDB连接问题

我们将一个ASP.NET MVC应用程序部署到Azure网站,该网站连接到MongoDB并执行读写操作。 应用程序迭代地执行此操作。 每分钟几千次。 我们使用Autofac初始化C#驱动程序,并按照https://groups.google.com/forum/#!topic/mongodb-user/_Z8YepNHnbI和其他一些地方的建议将MaxConnectionIdleTime设置为45秒。 我们仍然收到大量以下错误: 无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而建立的连接失败。 方法消息:“:{”ClassName“:”System.IO.IOException“,”消息“:”无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或已建立的连接失败,因为已连接的主机无法响应。 在连接到Azure上相同数据中心/区域中的VM上部署的MongoDB实例时,以及连接到外部PaaS MongoDB提供程序时,我们会收到此错误。 我在本地计算机上运行相同的代码并连接到同一个数据库,但我没有收到这些错误。 只有当我将代码部署到Azure网站时才会这样。 有什么建议?

如何提高MongoDB插入性能

结果: 如果您正在对容错的数据集进行操作,或者执行一次性过程,则可以进行validation,将WriteAcknowledge更改为Unacknowledged可以提供帮助。 此外,默认情况下,批量操作是IsOrdered,我不知道。 将此设置为False实际上会使操作批量执行,否则它将作为一个更新线程运行。 MongoDB 3.0 / WiredTiger / C#驱动程序 我有一个包含147,000,000个文档的集合,其中我每秒都会执行更新(希望如此)。 3000个文件。 以下是更新示例: “query” : { “_id” : BinData(0,”UKnZwG54kOpT4q9CVWbf4zvdU223lrE5w/uIzXZcObQiAAAA”) }, “updateobj” : { “$set” : { “b” : BinData(0,”D8u1Sk/fDES4IkipZzme7j2qJ4oWjlT3hvLiAilcIhU=”), “s” : true } } 这是一个典型的更新,我的要求是以每秒3000的速度插入。 不幸的是,这些花费的时间是原来的两倍,例如最后一次更新是针对1723个文档,并且需要1061毫秒。 该集合仅在_id上有索引,没有其他索引,并且该集合的平均文档大小为244字节,无上限。 服务器有64GB内存,12个线程。 插入性能非常好,收集尺寸较小,比如大约5000万,但是大约8000万之后真正开始下降。 可能是因为整套不在内存中? 数据库由RAID0 SSD支持,因此IO性能不应成为瓶颈,如果它应该在一开始就显示出来? 非常感谢一些指导,因为我相信MongoDB可以满足我的相当微薄的要求,而不是它使用的一些应用程序。数据库没有大量的读取率,因此Sharding不会改善问题,尽管可能我错了。 无论哪种方式,目前的插入率都不够好。 更新:这里只是查询的explain()… “queryPlanner” : { “plannerVersion” : 1, “namespace” : “Collection”, “indexFilterSet” […]

mongodb和C#的工作单位

我知道MongoDB不应该支持工作单元等。但我认为实现只存储意图(类似于标准)然后将它们提交给DB的存储库会很好。 否则,在存储库中的每个方法中,您都必须创建与DB的连接,然后将其关闭。 如果我们将连接放在某个BaseRepository类中的DB,那么我们将我们的存储库绑定到具体的数据库,并且测试存储库非常困难,以测试解决存储库的IoC。 在MongoDB中创建会话是个坏主意吗? 有没有办法将连接逻辑与存储库分开? 以下是Rob Conery的一些代码。 在每次请求时始终连接到您的数据库是一个好主意吗? 什么是最佳做法? 还有一件事。 想象一下,我想为集合提供索引。 以前我在构造函数中做过,但是使用Rob的方法,这似乎不符合逻辑。 using Norm; using Norm.Responses; using Norm.Collections; using Norm.Linq; public class MongoSession { private string _connectionString; public MongoSession() { //set this connection as you need. This is left here as an example, but you could, if you wanted, _connectionString = “mongodb://127.0.0.1/MyDatabase?strict=false”; } public void […]

C#MongoDB:如何正确映射域对象?

我最近开始阅读Evans的Domain-Driven设计书,并开始了一个小样本项目,以获得DDD的一些经验。 同时我想了解更多有关MongoDB的知识,并开始用MongoDB和最新的官方C#驱动程序替换我的SQL EF4存储库。 现在这个问题是关于MongoDB映射的。 我看到用公共getter和setter映射简单对象非常容易 – 没有痛苦。 但是我在没有公共设置者的情况下映射域实体有困难。 据我所知,构建有效实体的唯一真正干净的方法是将所需的参数传递给构造函数。 请考虑以下示例: public class Transport : IEntity { private readonly TransportID transportID; private readonly PersonCapacity personCapacity; public Transport(TransportID transportID,PersonCapacity personCapacity) { Validate.NotNull(personCapacity, “personCapacity is required”); Validate.NotNull(transportID, “transportID is required”); this.transportID = transportID; this.personCapacity = personCapacity; } public virtual PersonCapacity PersonCapacity { get { return personCapacity; } } […]

带有C#的MongoDB – 使用动态生成的谓词进行查询

我无法使用动态生成的谓词查询MongoDB数据库。 我试图查询的文档结构是: { “_id” : 3121 , “Active” : true , “CategoryId” : 1 , “Crci” : “IH” , “CultureId” : null , “DateUpdated” : { “$date” : 1381916923120 } , “Description” : “National Careers Service: Actuary” , “Keywords” : “” , “MaxLevel” : null , “MinLevel” : null , “PhoneNumber” : ” ” , […]

C#MongoDB – 如何在多个嵌套数组元素中添加和删除项目?

我在MongoDB中有一个看起来像这样的文档: { “Id”:”123″, “Product”: “test”, “Tags”:[ { “Name”: “name”, “Categories”: [ { //item }, { //item } ] }, { “Name”: “name”, “Categories”: [ { //item }, { //item } ] } ] } 现在,我需要添加一个新Item ,它需要通过其Id添加到该Product的Tags元素的所有类别中。 例如,当我插入Item 3 ,文档应如下所示: { “Id”:”123″, “Product”: “test”, “Tags”:[ { “Name”: “name”, “Categories”: [ { //item 1 }, { //item […]