Tag: mongodb

MongoDb C#动态创建索引和集合

我正在使用C#(MongDB驱动程序)动态创建集合。 我发现只有在插入至少一个文档时才会创建集合。 我正在做如下。 由于我为每个插入创建索引调用CreatOne,每次插入新文档时它会重新创建索引吗? 有没有更好的方法来动态创建集合和索引? public static void CreatAndInsert(double value1, double value2, string collectoinName) { var connectionString = “mongodb://localhost”; var client = new MongoClient(connectionString); var database = client.GetDatabase(“sample”); //Create Index var indexDefn = Builders.IndexKeys.Ascending(“datetime”); string collectionName = collectoinName; database.GetCollection(collectionName).Indexes.CreateOne(indexDefn, new CreateIndexOptions() { Background = true, Sparse = true}); //Create Collection var dbcollection = database.GetCollection(collectionName); var […]

尝试更新MongoDb数组元素时出错

在我的Azure CosmosDb MongoApi中,我有一个带有嵌入文档数组的JSON。 { “_id”: ObjectId(“5a95745df886842904b82f71”), “token”: “value1”, “channel”: “value2”, “urls”: [ { “url”: “”, “interval”: “” }, { “url”: “” “interval”: “” } ] } 我想更新特定数组元素中的“interval”字段。 问题是当我使用这样或者这样的解决方案时,我最终会遇到exception: MongoDB.Driver.MongoCommandException: Command findAndModify failed: Invalid BSON field name ‘urls.$.interval’. 所以,我决定尝试在Mongo Shell中运行查询并得到同样的错误: { “nMatched”: 0, “nUpserted”: 0, “nModified”: 0, “writeError”: { “code”: 2, “errmsg”: “Invalid BSON field name […]

使用C#BsonArray在MongoDB集合中插入TextMany文档

如何使用C#中的InsertMany()MongoDB方法在Single语句中插入多个文档 我的MongoDB数据库和连接 IMongoClient _client; IMongoDatabase _database; _client = new MongoClient(); _database = _client.GetDatabase(“test”); var collection = _database.GetCollection(“EmpInfo”); 我有一个collections–BsonArray var EmpInfoArray = new BsonArray { new BsonDocument { {“EmpID”, “100”}, {“EmpName”, “John”}, {“EmpMobile”, new BsonArray { new BsonDocument { {“MobNumber”, “55566610”}, {“IsPreferred”, true}, {“IsLive”, false} }, new BsonDocument { {“MobNumber”, “55566611”}, {“IsPreferred”, true}, {“IsLive”, true} }, […]

与使用数组更新运算符$ 的以下查询等效的MongoDB C#驱动程序是什么

来自https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up。 S [%3Cidentifier%3E] 鉴于以下收集 { “_id” : 1, “grades” : [ { “grade” : 80, “mean” : 75, “std” : 6 }, { “grade” : 85, “mean” : 90, “std” : 4 }, { “grade” : 85, “mean” : 85, “std” : 6 } ] } { “_id” : 2, “grades” : [ { “grade” […]

用C#投影切片

有没有办法使用c#驱动程序在一个查询中实现切片和投影? 下面是我想用c#实现的目标,但即时通讯卡住,任何人都可以帮我解决这个问题吗? db.employee.find({“employeeId”: “999”}, { “empActivity” : { “$slice”: -1 } }, {“employeeId”: 1, “empActivity.transId”: 1, _id: 0}) 注意:empActivity是一个包含嵌套文档的数组,上面的查询通过mongo shell完美地工作,但我无法在C#中找出它的等价物。

MongoDB C#驱动程序预测$ elemMatch $

我正在尝试将此查询从基于文本的filter转换为基于表达式。 查询部分没问题,但是我遇到了投影”state.transfer.attempts.$”: 1麻烦。 什么是Project $表达式等价物? 提前致谢 db.Items.find({ “state.transfer.attempts”: { “$elemMatch”: { “entityId”: 1, “state” : “failed” } } }, { “state.transfer.attempts.$”: 1 })

使用NoRM在MongoDB中进行延迟加载

我有一个类似的模型:(简化) 题: public class Question { public string QuestionID { get; set; } public string Title { get; set; } public string Body { get; set; } public List Answers { get; set; } } 回答: public class Answer { public string QuestionID { get; set; } public string Body { get; set; } } […]

使用C#更新mongodb中的嵌入式文档

假设你有下一堂课。 它包含代理已运行的系统 public class AgentHistory { public ObjectId Id { get; set; } public Guid SystemId { get; set; } public Guid CampaignId { get; set; } public List Agents { get; set; } } 现在,当我得到一个新的代理时,我会做下一件事: public override AgentHistory Save(AgentHistory agent) { if (agent == null) throw new ArgumentNullException(“agent”); if (_repository.Exists(agent)) { AgentHistory dbEntity = […]

使用C#MongoDB驱动程序的嵌套数组$ pull查询

我按照预期在mongo shell上运行以下查询。 db.getCollection(‘personnels’).update( { _id: ObjectId(“55f6728b9d73a15807885de8”), “Devices._id”:ObjectId(“55fa5f7ac9e7863a3836e331”) }, { $pull:{ “Devices.$.DeviceCloudFolders”: { “CloudFolderId”: ObjectId(“5615124b06275f072040c4f1”)}} } ); 这是我的文档结构: { “_id” : ObjectId(“55f6728b9d73a15807885de8”), “FirstName” : “Tolga”, “Devices” : [ { “_id” : ObjectId(“55fa5f7ac9e7863a3836e331”), “Name” : “tolga-laptop”, “DeviceCloudFolders” : [{ “AuthorityType” : 1, “CloudFolderId” : ObjectId(“55f96db5c9e7863a3836e310”), “Status” : 1 }], “Status” : 1 } ], “Status” : 1 […]

处理与服务定位器模式一起使用时MongoDB如何存储DateTime

我的同事和我在辩论中处于僵局,其他人的意见将不胜感激。 我们利用服务定位器模式和通用接口来抽象我们的所有数据访问,以便随着需求的变化,我们可以轻松地在不同的数据源之间进行交换。 我们的调用代码没有指示数据的存储位置或方式。 它只是通过服务注册表提供的服务访问数据。 当我们在对象上有DateTime字段并将其存储到MongoDB数据源时,我们正在讨论的问题就出现了。 我注意到的是,当我们在C#中有一个带有DateTime的对象时,它显示为正确的时间。 当我们使用MongoVUE登录MongoDB服务器来检查对象时,它会显示正确的时间。 但是当我们检索对象时,DateTime现在是UTC。 当将内存中的DateTime与从MongoDB数据源检索到的对象中的DateTime进行比较时,这显然会产生问题。 我知道Mongo在内部将DateTime存储为UTC时间。 我甚至理解为什么在你打电话时它可能会返回UTC。 这是辩论开始的地方。 有人建议这只是一个美容问题,只是显示日期时的一个问题。 因此,我们应该简单地在界面层中调用.ToLocalTime。 我不同意并声称这危险地打破了我们在实现服务定位器模式时创建的抽象层。 它还提出了与那些日期时间的交互问题,因为它涉及触发其他事件。 我在其他地方读到的是,我们应该将我们的时间存储为字符串,特别是作为UTC格式的一些标准。 以这种方式,接口层不知道或不关心如何存储DateTime,也不知道我们的对象,因为每个数据源都以相同的方式存储该字符串。 我已经成功使用ISO 1806格式,但我的同事认为这是一个’hacky’修复,使用.toLocalTime是处理这种情况的适当方法。 我对其他人对这个话题的看法很感兴趣。 提前感谢您的意见。