/// <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);
            }
        }
        /// <summary>
        /// 添加Level1、Level2数据点记录,这是记录,需要重新定位数据库和Collection
        /// </summary>
        /// <param name="flight"></param>
        /// <param name="parameterID"></param>
        /// <param name="reducedRecords"></param>
        /// <param name="level2Record"></param>
        /// <returns></returns>
        internal string AddOneParameterValue(FlightDataEntities.Flight flight, string parameterID,
            FlightDataEntities.Level1FlightRecord[] reducedRecords)
        {
            using (AircraftMongoDbDal dal = new AircraftMongoDbDal())
            {
                MongoServer mongoServer = dal.GetMongoServer();
                //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常
                try
                {//此方法操作的记录为跟架次密切相关,需要拆分存储的记录,最好在DAL里面去处理表名构建逻辑
                    MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, flight.Aircraft.AircraftModel);
                    if (database != null)
                    {
                        MongoCollection<FlightDataEntities.Level1FlightRecord> modelCollection1
                            = dal.GetLevel1FlightRecordMongoCollectionByFlight(database, flight);
                        modelCollection1.InsertBatch(reducedRecords);

                        //MongoCollection<FlightDataEntities.Level2FlightRecord> modelCollection2
                        //    = dal.GetLevel2FlightRecordMongoCollectionByFlight(database, flight);
                        //modelCollection2.InsertBatch(level2Records);
                    }
                }
                catch (Exception e)
                {
                    LogHelper.Error("AddOneParameterValue", e);
                    return e.Message;
                }
            }
            return string.Empty;
        }
예제 #3
0
        private MongoCursor<Level1FlightRecord> FindMongoDBCursor(Flight flight, string[] parameterIds,
            int startSecond, int endSecond, AircraftMongoDbDal dal, MongoDatabase database)
        {
            MongoCollection<FlightDataEntities.Level1FlightRecord> modelCollection1
                = dal.GetLevel1FlightRecordMongoCollectionByFlight(database, flight);
            List<IMongoQuery> qs = new List<IMongoQuery>();
            qs.Add(Query.EQ("FlightID", flight.FlightID));
            qs.Add(Query.Or(Query.And(
                            Query.GTE("StartSecond", startSecond),
                            Query.LT("StartSecond", endSecond)),
                    Query.And(
                        Query.GT("EndSecond", startSecond),
                        Query.LTE("EndSecond", endSecond))));
            //最后这个条件是如果一个Level1Record的起始秒、结束秒
            //介于参数起始值和结束值之间,都可以Select,
            //因为区间段基本上是定长的,所以可以这样认定
            if (parameterIds != null && parameterIds.Length > 0)
            {
                var bsonParamID = from id in parameterIds
                                  select new BsonString(id);
                qs.Add(Query.In("ParameterID", bsonParamID));//前两个条件必须:架次、时间
            }

            IMongoQuery q1 = Query.And(qs);

            //var bsonParamID = from id in parameterIds
            //                  select new BsonString(id);

            ////先取出Level1记录
            //IMongoQuery q1 = Query.And(
            //    Query.EQ("FlightID", flight.FlightID),
            //    Query.Or(Query.And(
            //                Query.GTE("StartSecond", startSecond),
            //                Query.LT("StartSecond", endSecond)),
            //        Query.And(
            //            Query.GT("EndSecond", startSecond),
            //            Query.LTE("EndSecond", endSecond))),
            //    //最后这个条件是如果一个Level1Record的起始秒、结束秒
            //    //介于参数起始值和结束值之间,都可以Select,
            //    //因为区间段基本上是定长的,所以可以这样认定
            //    Query.In("ParameterID", bsonParamID) //前两个条件必须:架次、时间
            //            );

            var cursor = modelCollection1.Find(q1);
            return cursor;
        }