Tag: mongodb .net driver

在聚合框架中使用Facets C#with Multiple Facet,Unwind和sortByCount

如何在C#中表示此管道? —–Id —–Name —–ProductAttributes (object array) | —–ProductAttributeType —–ProductAttributeValues (string array) 我的collections: { “_id” : ObjectId(“5b41a5e225cd892c14628b78”), “Name” : “Esmalte Super Pérola Fashion Glamour”, “ProductAttributes” : [ { “ProductAttributeType” : “Coleção”, “Values” : [ “Fashion” ] }, { “ProductAttributeType” : “Tamanho”, “Values” : [ “8 ml” ] }, { “ProductAttributeType” : “Tom”, “Values” : [ “Vermelho”, […]

使用C#驱动程序从MongoDB Collection上的文本查询中检索相关性排序结果

我正在尝试文本查询集合并以文本匹配顺序检索结果。 文档很好地解释了如何在shell中执行此操作: db.articles.find( { status: “A”, $text: { $search: “coffee cake” } }, { score: { $meta: “textScore” } } ).sort( { date: 1, score: { $meta: “textScore” } } ) 但它需要将查找中的附加score字段投影到排序中。 在C#中,我有一个如下所示的函数: public IEnumerable TextSearch(MongoCollection coll, string text) { var cursor = coll.Find(Query.Text(text)) .SetSortOrder(SortBy.MetaTextScore(???)); foreach(var t in cursor) { // strip projected score from […]

如何将ISODate转换为DateTime?

在一个集合中,我有IsoDates存储如下: SubmitDateTime” : ISODate(“2015-03-02T07:39:05.463Z”) 现在我想使用以下属性将此属性映射到MyModel : public class MyModel { public DateTime SubmitDateTime { get; set; } } 然后将其映射如下: GetCollection(“collection_name”).Find(myQuery).ToListAsync(); 不幸的是我收到此错误: System.ArgumentOutOfRangeException BsonDateTime MillisecondsSinceEpoch的值-9223372036854775808超出了可以转换为.NET DateTime的范围 有谁知道如何解决这一问题? 谢谢。 PS我最初使用Mongo shell中的脚本将此格式的字符串表示forms“2015-03-30T10:50:01.813”转换为IsoDate : var cursor = db.collection_name.find() while (cursor.hasNext()) { var doc = cursor.next(); db.collection_name.update({_id : doc._id}, {$set : {SubmitDateTime : new Date(doc.SubmitDateTime)}}) } 也许可以在那里取得进步。

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索引?

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

如何在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’: { […]

C#mongodb驱动2.0 – 如何在批量操作中进行upsert?

我从1.9迁移到2.2并阅读文档我很惊讶地发现在批量操作期间不可能进行升级,因为操作不允许选项。 bulkOps.Add(new UpdateOneModel(filter, update)); collection.BulkWrite(bulkOps); 应该 options.isUpsert = true; bulkOps.Add(new UpdateOneModel(filter, update, options)); collection.BulkWrite(bulkOps); 这项工作正在进行中,有意或者我遗漏了什么? 谢谢。

使用C#聚合$ lookup

我有以下MongoDb查询工作: db.Entity.aggregate( [ { “$match”:{“Id”: “12345”} }, { “$lookup”: { “from”: “OtherCollection”, “localField”: “otherCollectionId”, “foreignField”: “Id”, “as”: “ent” } }, { “$project”: { “Name”: 1, “Date”: 1, “OtherObject”: { “$arrayElemAt”: [ “$ent”, 0 ] } } }, { “$sort”: { “OtherObject.Profile.Name”: 1 } } ] ) 这将检索与另一个集合中的匹配对象连接的对象列表。 有没有人知道如何使用LINQ或使用这个确切的字符串在C#中使用它? 我尝试使用以下代码,但它似乎无法找到QueryDocument和MongoCursor的类型 – 我认为它们已被弃用? BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize(“{ […]

C#:从bson文档中检索数组值

在我的MongoDB集合中,我有一个带有数组条目的文档。 如何在C#中将这些数组值作为字符串数组获取? 我可以让文档本身恢复正常,但我似乎无法获得数组值。 这是我要做的事情: QueryDocument findUser = new QueryDocument(“_id” , id); BsonDocument user = bsonCollection.FindOne(findUser); 所以在这个user文档中,有一个我想要获取并解析为字符串数组的数组。 该文档看起来像这样: { “firstname” : “jon”, “secondname” : “smith”, “loves” : [“this”,”that”,”other stuff”] }