public async Task <T> GetDocumentWithSpecificFieldsAsync(string objectIdString, string[] projectionFields) { // TODO:Mohit Use FilterDefinitionBuilder - as the class is created for specific purpose var filter = new BsonDocument(); filter.Add("_id", objectIdString); var projBuilder = new ProjectionDefinitionBuilder <T>(); ProjectionDefinition <T>[] projections = new ProjectionDefinition <T> [projectionFields.Length]; for (int i = 0; i < projectionFields.Length; i++) { var prof = projBuilder.Include(projectionFields[i]); projections[i] = prof; } var projectionDefinition = projBuilder.Combine(projections); var resultList = await this.Collection.Find(filter).Project <T>(projectionDefinition).ToListAsync(); //var resultList = await collection.Find(filter).ToListAsync(); if (resultList.Count > 0) { return(resultList[0]); } else { return(null); } }
public static ProjectionDefinition <TDocument> CreateMongoProjection(Action <IDocumentProjectionBuilder> projection) { var builder = new MongoDocumentProjectionBuilder <TDocument>(); projection?.Invoke(builder); return((builder._projections.Count != 1) ? InternalBuilder.Combine(builder._projections) : builder._projections[0]); }
protected virtual ProjectionDefinition <T> CreateProjectionDefinition( ProjectionParams projection, ProjectionDefinitionBuilder <T> projectionBuilder) { projection = projection ?? new ProjectionParams(); return(projectionBuilder.Combine( projection.Select(field => projectionBuilder.Include(field)) ).Exclude(InternalIdFieldName)); }
private BsonDocument simpleKeyQuery() { // Key Query rotateCollection(); BsonDocument query = new BsonDocument(); int range = sequence * testOpts.workingset / 100; int rest = sequence - range; int recordno = rest + getNextVal(range); query.Add("_id", new BsonDocument("w", workerID).Add("i", recordno)); DateTime starttime = DateTime.Now; BsonDocument myDoc; List <String> projFields = new List <String>(testOpts.numFields); if (testOpts.projectFields == 0) { myDoc = coll.Find(query).FirstOrDefault(); } else { int numProjFields = (testOpts.projectFields <= testOpts.numFields) ? testOpts.projectFields : testOpts.numFields; int i = 0; while (i < numProjFields) { projFields.Add("fld" + i); i++; } var projection = new ProjectionDefinitionBuilder <BsonDocument>(); foreach (var field in projFields) { projection.Include(field); } myDoc = coll.Find(query) .Project <BsonDocument>(projection.Combine()) .FirstOrDefault(); } if (myDoc != null) { var taken = (DateTime.Now - starttime).TotalMilliseconds; if (taken > testOpts.slowThreshold) { testResults.RecordSlowOp("keyqueries", 1); } testResults.RecordOpsDone("keyqueries", 1); } return(myDoc); }
private void rangeQuery() { // Key Query rotateCollection(); BsonDocument query = new BsonDocument(); var projection = new ProjectionDefinitionBuilder <BsonDocument>(); int recordno = getNextVal(sequence); query.Add("_id", new BsonDocument("$gt", new BsonDocument("w", workerID).Add("i", recordno))); DateTime starttime = new DateTime(); IAsyncCursor <BsonDocument> cursor; if (testOpts.projectFields == 0) { cursor = coll.Find(query) .Limit(testOpts.rangeDocs) .ToCursor(); } else { int numProjFields = (testOpts.projectFields <= testOpts.numFields) ? testOpts.projectFields : testOpts.numFields; for (int i = 0; i < numProjFields; i++) { projection.Include("fld" + i); } cursor = coll.Find(query) .Project <BsonDocument>(projection.Combine()) .Limit(testOpts.rangeDocs) .ToCursor(); } while (cursor.MoveNext()) { var batch = cursor.Current; foreach (var doc in batch) { // Consume the cursor } } cursor.Dispose(); var taken = (DateTime.Now - starttime).TotalMilliseconds; if (taken > testOpts.slowThreshold) { testResults.RecordSlowOp("rangequeries", 1); } testResults.RecordOpsDone("rangequeries", 1); }
public async Task <List <T> > GetAllDocumentsWithSpecificFieldsAsync(string[] projectionFields) { var filter = new BsonDocument(); var projBuilder = new ProjectionDefinitionBuilder <T>(); ProjectionDefinition <T>[] projections = new ProjectionDefinition <T> [projectionFields.Length]; for (int i = 0; i < projectionFields.Length; i++) { var prof = projBuilder.Include(projectionFields[i]); projections[i] = prof; } var projectionDefinition = projBuilder.Combine(projections); var result = await this.Collection.Find(filter).Project <T>(projectionDefinition).ToListAsync(); return(result); }
/// <summary> /// 获取字段 /// </summary> /// <param name="fieldsExp"></param> /// <returns></returns> public ProjectionDefinition <T> IncludeFields <T>(Expression <Func <T, object> > fieldsExp) where T : class, new() { ProjectionDefinitionBuilder <T> projection = Builders <T> .Projection; if (fieldsExp == null) { return(null); } List <ProjectionDefinition <T> > list = new List <ProjectionDefinition <T> >(); NewExpression newExpression = fieldsExp.Body as NewExpression; if (newExpression == null || newExpression.Members == null) { throw new Exception("fieldsExp is invalid expression format, eg: x => new { x.Field1, x.Field2 }"); } foreach (MemberInfo current in newExpression.Members) { list.Add(projection.Include(current.Name)); } return(projection.Combine(list)); }