public void Test() { var client = new MongoClient(""); var server = client.GetServer(); var db = server.GetDatabase(""); var collection = db.GetCollection(""); List <BsonDocument> docs = collection.FindAll().ToList(); var builder = new BsonDocumentBuilder(); var aggregateDoc = builder.BuildDocument(docs); }
/// <summary> /// Performs a regular expression search against a single column. Case be sensitive or not. /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="sensitive">True for case-senstive and false (default) if not.</param> /// <returns>List of T</returns> public async Task <IEnumerable <T> > Search(string key, string value, bool sensitive = false) { var bsonDocumentBuilder = new BsonDocumentBuilder { Key = key, Value = value, Operator = Operator.Regex }; var filterDefinition = BuildFilterDefinition(bsonDocumentBuilder, sensitive); return(await GetDocuments(filterDefinition)); }
/// <summary> /// </summary> /// <param name="entry"></param> /// <param name="sensitive">Only used for Regex to determine case-sensitivity (false = in-sensitive, true = sensitive)</param> /// <returns></returns> private FilterDefinition <T> BuildFilterDefinition(BsonDocumentBuilder entry, bool sensitive = false) { CheckObjectContainsProperty(entry.Key); FilterDefinition <T> filterDefinition; switch (entry.Operator) { case Operator.GreaterThan: filterDefinition = Builders <T> .Filter.Gt(entry.Key, entry.Value); break; case Operator.GreaterThanEquals: filterDefinition = Builders <T> .Filter.Gte(entry.Key, entry.Value); break; case Operator.LessThan: filterDefinition = Builders <T> .Filter.Lt(entry.Key, entry.Value); break; case Operator.LessThanEquals: filterDefinition = Builders <T> .Filter.Lte(entry.Key, entry.Value); break; case Operator.Regex: filterDefinition = Builders <T> .Filter.Regex(new StringFieldDefinition <T>(entry.Key), new BsonRegularExpression(new Regex(entry.Value.ToString(), !sensitive ? RegexOptions.IgnoreCase : RegexOptions.None))); break; case Operator.NotEquals: filterDefinition = Builders <T> .Filter.Ne(entry.Key, entry.Value); break; default: filterDefinition = Builders <T> .Filter.Eq(entry.Key, entry.Value); break; } return(filterDefinition); }