internal string AddFlightConditionDecisionRecordsBatch(Flight flight, FlightDataEntities.Decisions.DecisionRecord[] records) { using (AircraftMongoDbDal dal = new AircraftMongoDbDal()) { MongoServer mongoServer = dal.GetMongoServer(); //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常 try {//此方法操作的记录为跟架次密切相关,但肯定LevelTopRecord需要包含趋势分析等信息, //建议不要分表,存放在Common里面 MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, flight.Aircraft.AircraftModel); if (database != null) { MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection1 = dal.GetFlightConditionDecisionRecordMongoCollectionByFlight(database, flight); IMongoQuery q1 = Query.EQ("FlightID", new MongoDB.Bson.BsonString(flight.FlightID)); modelCollection1.Remove(q1); modelCollection1.InsertBatch(records); } } catch (Exception e) { LogHelper.Error("AddFlightConditionDecisionRecordsBatch", e); return e.Message; } } return string.Empty; }
/// <summary> /// 删除一个架次相关记录,这是记录,需要重新定位数据库和Collection /// </summary> /// <param name="mongoServer"></param> /// <param name="flight"></param> private void RemoveRelatedRecords(MongoServer mongoServer, Flight flight, AircraftMongoDbDal dal, IMongoQuery flightIdQuery) {//TODO: try {//此方法操作的记录为跟架次密切相关,需要拆分存储的记录,最好在DAL里面去处理表名构建逻辑 MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, flight.Aircraft.AircraftModel); if (database != null) { //删除判据记录 MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection = dal.GetDecisionRecordMongoCollectionByFlight(database, flight); modelCollection.Remove(flightIdQuery); //删除Level1记录 MongoCollection<FlightDataEntities.Level1FlightRecord> modelCollection1 = dal.GetLevel1FlightRecordMongoCollectionByFlight(database, flight); modelCollection1.Remove(flightIdQuery); //删除LevelTop记录 MongoCollection<FlightDataEntities.LevelTopFlightRecord> modelCollection2 = dal.GetLevelTopFlightRecordMongoCollectionByFlight(database, flight); modelCollection2.Remove(flightIdQuery); //删除FlightRawDataRelationPoint记录 MongoCollection<FlightDataEntities.FlightRawDataRelationPoint> modelCollection3 = dal.GetFlightRawDataRelationPointMongoCollectionByFlight(database, flight); modelCollection3.Remove(flightIdQuery); //删除FlightConditionDecisionRecord记录 MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection4 = dal.GetFlightConditionDecisionRecordMongoCollectionByFlight(database, flight); modelCollection4.Remove(flightIdQuery); //删除FlightRawDataRelationPoint记录 MongoCollection<FlightDataEntities.ExtremumPointInfo> modelCollection5 = dal.GetFlightExtremeMongoCollectionByFlight(database, flight); modelCollection5.Remove(flightIdQuery); //删除FlightExtreme记录 MongoCollection<FlightDataEntities.ExtremumPointInfo> modelCollection6 = dal.GetFlightExtremeMongoCollectionByFlight(database, flight); modelCollection6.Remove(flightIdQuery); } } catch (Exception e) { LogHelper.Error("RemoveRelatedRecords", e); } }
internal DecisionRecord[] GetFlightConditionDecisionRecords(AircraftModel model, DateTime startYearMonth, DateTime endYearMonth, string[] aircraftNumbers) { using (AircraftMongoDbDal dal = new AircraftMongoDbDal()) { MongoServer mongoServer = dal.GetMongoServer(); //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常 try {//此方法操作的记录为跟架次密切相关,但肯定LevelTopRecord需要包含趋势分析等信息, //建议不要分表,存放在Common里面 MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, model); IMongoQuery q1 = Query.GTE("FlightDate", new BsonDateTime(startYearMonth)); IMongoQuery q2 = Query.LTE("FlightDate", new BsonDateTime(endYearMonth)); IMongoQuery q0 = null; if (database != null) { if (aircraftNumbers != null && aircraftNumbers.Length > 0) { MongoCollection<Flight> modelCollection1 = database.GetCollection<Flight>(AircraftMongoDb.COLLECTION_FLIGHT); var queryableFlights = modelCollection1.AsQueryable(); var flights = from oneFlight in queryableFlights where oneFlight.Aircraft != null && oneFlight.Aircraft.AircraftModel != null && oneFlight.Aircraft.AircraftModel.ModelName == model.ModelName && oneFlight.FlightDate > startYearMonth && oneFlight.FlightDate <= endYearMonth && aircraftNumbers.Contains(oneFlight.Aircraft.AircraftNumber) select oneFlight.FlightID; var flights2 = flights.Distinct(); List<MongoDB.Bson.BsonString> list = new List<BsonString>(); foreach (var f in flights2) { list.Add(new BsonString(f)); } q0 = Query.In("FlightID", list); } } MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection2 = dal.GetFlightConditionDecisionRecordMongoCollectionByFlight(database, null);//没有按Flight分割的 IMongoQuery query = q0;//(q0 == null) ? Query.And(q1, q2) : Query.And(q1, q2, q0); if (query != null) { var cursor = modelCollection2.Find(query); return cursor.ToArray(); } return new DecisionRecord[] { }; } catch (Exception e) { LogHelper.Error("GetFlightConditionDecisionRecords", e); return new DecisionRecord[] { }; } } return new DecisionRecord[] { }; }