Tag: mongodb

MongoDB c#驱动程序:Case Insensitive使用linq在列表中使用或包含比较

我正在使用MongoDB C#驱动程序,我想在集合上做一个linq where子句,它将属性的低级版本与我在内存中的列表的小写版本进行比较。 像这样; items = items.Where(i => listToCheck.Contains(i.Property.ToLower())); 我也试过…… items = items.Where(i => i.Property.ToLower().In(listToCheck)); 我认为这实际上是正确的,应该可行,但可能尚未实施。 我收到一个错误,说“与ToLower()命令有关的’不支持的where子句’。 从我所看到的驱动程序目前无法实现这一点,因为它必须使用正则表达式进行“IN”查询,这是我无法看到的。 我想知道的是,如果有可能,如果可能,怎么样?

如何在C#中使用MapReduce加入2个集合?

为了连接两个数据集,我尝试将此示例转换为C#,方法如下: 如果你们中的任何人可以建议适当的代码修改以获得与示例相同的结果,我将非常感激。

mongodb c#选择特定字段

需要一些帮助来创建一个通用方法来按名称选择字段。 像这样的东西: T GetDocField(string doc_Id, string fieldName) 我得到的最好的是使用投影 ,它给我的文档只有想要的字段: public T GetDocField(string Doc_Id, string fieldName) { var value = DocCollection.Find(d => d.Id == Doc_Id) .Project(Builders.Projection .Include(new StringFieldDefinition (fieldName))).FirstOrDefaultAsync().Result; 注意:我正在使用新的c#驱动程序(2.0) 谢谢!!

如何强制mongo以小写forms存储成员?

我有一个BsonDocuments集合,例如: MongoCollection products; 当我插入集合时,我希望成员名称始终为小写。 阅读文档后,似乎是ConventionPack的出路。 所以,我已经定义了这样一个: public class LowerCaseElementNameConvention : IMemberMapConvention { public void Apply(BsonMemberMap memberMap) { memberMap.SetElementName(memberMap.MemberName.ToLower()); } public string Name { get { throw new NotImplementedException(); } } } 在我得到我的集合实例之后,我注册了这样的约定: var pack = new ConventionPack(); pack.Add(new LowerCaseElementNameConvention()); ConventionRegistry.Register( “Product Catalog Conventions”, pack, t => true); 不幸的是,这对我的集合中存储的内容没有任何影响。 我调试它,发现从不调用Apply方法。 为了让我的约会有效,我需要做些什么?

Mongodb NoRM和POCO

我正在用C#试验Mongodb和NoRM。 从我所读到的,在Mongodb中唯一标识文档的ObjectId是一种“特殊”Guid(在某种意义上是唯一的),但在其中有一些重要的部分允许更容易的排序和索引(时间戳,机器哈希) ,processId和增量)。 我想保持我的对象真的POCO与自动生成的Guid为Id所以没有像ObjectId这样的外部类型会阻止我迁移到另一种技术或者回到经典的Ado.net或Nhibernate的东西。 另一种选择是在POCO中使用Id作为字符串并使用ObjectId.NewObjectId().ToString() 它的最佳实践是什么?

MongoDB for C#和iPhone应用程序

我正处于设计应用程序的初始阶段,该应用程序将在C#中实现后端,该后端将使用IIS上托管的WCF Web服务为其他平台提供数据。 其中一个平台将是iPhone。 由于这是一个个人项目,我想用它来学习MongoDB。 我已经知道有MongoDB和C#的社区开发驱动程序,所以我可以使用MongoDB处理服务器端的持久性。 在不知道MongoDB提供的复制模型的情况下,我正在考虑某种简单的同步模型,以便在iPhone未连接或连接不良时保持数据本地化。 这是一个问题:可以使用MongoDB C驱动程序在iPhone中使用MongoDB吗? 有没人试过呢?

有没有办法创建或更新MongoDB索引?

根据createIndexes命令的文档: 如果使用一组选项创建索引,然后使用相同的索引字段但不同的选项发出createIndexes,MongoDB将不会更改选项也不会重建索引。 解决方案是删除索引并从头开始创建它,但这样做成本很高。 有没有办法在没有索引的情况下创建索引,如果索引具有相同的选项则不执行任何操作,如果选项已更改则替换索引? 这个问题最初是由Phil Barresi 在这里提出的,但后来被删除了。

Mongodb:如何检查多边形中是否包含一个点?

我有一个点arrays(纬度,经度)区域的点列表。 我已经在这些数组上做了一个索引,现在我想知道一个点是否在该多边形内。 MongoDB可以吗? 我已经尝试过这些命令,但没有运气: > polygonA = [ [ 48.780809,2.307129],[ 48.781809,2.300129],[ 48.770809,2.317129]] > db.contours.find({ “rings.ring” : { “$within” : { “$polygon” : polygonA } } }) 和 > db.runCommand( { geoNear : “contours” , within : [2.307129,48.780809,], num : 10 } ); 我的数据结构是: > db.contours.findOne({},{‘rings’:0}) { “_id” : ObjectId(“50364617d591ac166000c196”), “foundfieldname” : “Name”, “geometrytype” : “geometryPolygon”, […]

MongoDB从子文档中删除子文档文档

我为MongoDB使用10gen C#驱动程序,我想从子文档中删除一个子文档。 我不知道怎么做。 这是一个看起来像我的文档的例子 { “_id”: “binary_stuff”, “Name”: “MyApplication”, “Settings”: [ { “_id”: “binary_stuff”, “Key”: “ImportDirectory”, “Value”: “C:\data”, “Overrides”: [{ “_id”: “binary_stuff”, “Name”: “PathDirectory”, “Value”: “C:\anotherData” }] }, } 我想删除覆盖哪个名称是PathDirectory。 这是我写的查询,但它不起作用。 我没有错误。 var query = Query.And(Query.EQ(“_id”, applicationId), Query.EQ(“Settings.Key”, “ImportDirectory”), Query.EQ(“Settings.$.Overrides.Name”, “PathDirectory”)); Run(database => database.Applications().Remove(query)); 谢谢你的帮助。 约翰

如何在C#驱动程序中设置MongoDB Change Stream’ManageType’?

运行新的MongDB服务器版本3.6,并尝试将更改流监视添加到集合以获取新插入和文档更新的通知时,我只接收更新通知,而不是插入。 这是我尝试添加手表的默认方式: IMongoDatabase mongoDatabase = mongoClient.GetDatabase(“Sandbox”); IMongoCollection collection = mongoDatabase.GetCollection(“TestCollection”); var changeStream = collection.Watch().ToEnumerable().GetEnumerator(); changeStream.MoveNext(); var next = changeStream.Current; 然后我从MongoDB下载了C#源代码,看看他们是如何做到这一点的。 查看他们的更改流手表的测试代码,他们创建一个新文档(插入),然后立即更改该文档(更新),然后设置Change Stream手表以接收’更新’通知。 没有给出关于如何观察“插入”通知的示例。 我已经查看了MongoDB网站和SO上的Java和NodeJS示例,这些示例似乎很简单,并定义了一种查看插入和更新的方法: var changeStream = collection.watch({ ‘$match’: { $or: [ { ‘operationType’: ‘insert’ }, { ‘operationType’: ‘update’ } ] } }); C#驱动程序的API有很大的不同,我原以为他们会为C#和Java和NodeJS保留相同的API。 我发现没有或只有很少的例子让C#做同样的事情。 我最接近的是以下尝试,但仍然失败,C#版本的文档非常有限(或者我找不到合适的位置)。 设置如下: String json = “{ ‘$match’: { ‘operationType’: { […]