Exemple #1
0
        public static FilterDefinition <TDocument> NotDeactivated <TDocument, TItem>(FilterDefinitionBuilder <TDocument> builder, Expression <Func <TDocument, IEnumerable <TItem> > > acessor, DateTime?dateTime = null) where TItem : IActivationAware
        {
            var twoBuilder = new FilterDefinitionBuilder <TItem>();

            if (!dateTime.HasValue)
            {
                dateTime = DateTime.UtcNow;
            }
            return(builder.Or
                   (
                       builder.Not
                       (
                           builder.ElemMatch
                           (
                               acessor,
                               twoBuilder.Exists
                               (
                                   t => t.DeactivationDate
                               )
                           )
                       ),
                       builder.ElemMatch
                       (
                           acessor,
                           twoBuilder.Gt
                           (
                               t => t.DeactivationDate,
                               dateTime.Value
                           )
                       )
                   ));
        }
Exemple #2
0
        /// <summary>
        /// Get by tags
        /// </summary>
        /// <param name="containingTags"></param>
        /// <param name="take"></param>
        /// <param name="skip"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <IEnumerable <TEntity> > GetByTags(IEnumerable <string> containingTags, int take, int skip, CancellationToken token)
        {
            var filterDefinition = filterBuilder.ElemMatch((entity) => entity.Tags, (tag) => containingTags.Contains(tag));

            var cursor = await this.collection.FindAsync <TEntity>(filterDefinition, new FindOptions <TEntity, TEntity>() { Skip = skip, Limit = take });

            return(await cursor.ToListAsync(token));
        }
Exemple #3
0
        public async Task <dynamic> Post([FromBody] ModifySongRequest requestBody, [FromRoute] string id)
        {
            var userId = new ObjectId(this.GetCurrentUserId());
            var songId = new ObjectId(id);

            var userCollection = MongoWrapper.Database.GetCollection <Models.Musician>(nameof(Models.User));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.Musician>();
            var userFilter        = userFilterBuilder.And
                                    (
                userFilterBuilder.Eq(u => u._id, userId),
                GeneralUtils.NotDeactivated(userFilterBuilder),
                userFilterBuilder.ElemMatch(m => m.Songs, s => s._id == songId),
                GeneralUtils.NotDeactivated(userFilterBuilder, m => m.Songs)
                                    );

            var userUpdateBuilder = new UpdateDefinitionBuilder <Models.Musician>();
            var userUpdate        = userUpdateBuilder
                                    .Set($"{nameof(Musician.Songs).WithLowercaseFirstCharacter()}.$.{nameof(Models.Song.RadioAuthorized).WithLowercaseFirstCharacter()}",
                                         requestBody.AutorizadoRadio)
                                    .Set($"{nameof(Musician.Songs).WithLowercaseFirstCharacter()}.$.{nameof(Models.Song.Name).WithLowercaseFirstCharacter()}",
                                         requestBody.Nome)
                                    .Set($"{nameof(Musician.Songs).WithLowercaseFirstCharacter()}.$.{nameof(Models.Song.Original).WithLowercaseFirstCharacter()}",
                                         requestBody.Autoral);

            var updateResult = await userCollection.UpdateOneAsync(userFilter, userUpdate);

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Message = "Música atualizada com sucesso!",
                Success = true
            });
        }
Exemple #4
0
        private async Task <bool> IsUserJoinedThisGroupBeforeAsync(Chat chat, Telegram.Bot.Types.User user, FilterDefinitionBuilder <Entities.User> filter, IMongoCollection <Entities.User> usersCollection)
        {
            var existenceFilter = filter.ElemMatch(c => c.Groups, d => d.ChatId == chat.Id);
            var userGroup       = await usersCollection.FindAsync(existenceFilter);

            return(userGroup.SingleOrDefault() != null);
        }
        private bool DoesKeyExist(Guid keyValue)
        {
            FilterDefinitionBuilder <Tenant> filterBuilder = new FilterDefinitionBuilder <Tenant>();
            var filter = filterBuilder.ElemMatch(x => x.Keys, key => key.Value == keyValue);

            return(_tenantCollection.FindSync(filter).Any());
        }
Exemple #6
0
        public override Response <AuditResponse, Error> Handle(AuditRequest request)
        {
            var response = InnerHandler.Handle(request);

            if (response.IsSuccess)
            {
                FilterDefinitionBuilder <Tenant> filterBuilder = new FilterDefinitionBuilder <Tenant>();
                var filter = filterBuilder.ElemMatch(x => x.Keys, key => key.Value == request.ApiKey);
                var tenant = _tenantCollection.FindSync(filter).First();

                tenant.RecordProjectResult(new Project
                {
                    Name     = request.Project,
                    Version  = request.Version,
                    Packages = response.Success.Packages.Select(package => new Domain.Package
                    {
                        Name            = package.Name,
                        Version         = package.Version,
                        PackageManager  = "nuget",
                        Vulnerabilities = package.Vulnerabilities?.Select(vulnerability => new Vulnerability
                        {
                            Classification   = Classification.Unknown,
                            Description      = vulnerability.Description,
                            Title            = vulnerability.Title,
                            References       = vulnerability.References,
                            AffectedVersions = vulnerability.Versions
                        }).ToArray() ?? new Vulnerability[0]
                    })
                });

                _tenantCollection.ReplaceOne(x => x.Id == tenant.Id, tenant);
            }

            return(response);
        }
        public virtual Task <TUser> FindAsync(UserLoginInfo login)
        {
            var builder = new FilterDefinitionBuilder <TUser>();
            var filter  = builder
                          .ElemMatch(u => u.Logins,
                                     l => l.LoginProvider == login.LoginProvider &&
                                     l.ProviderKey == login.ProviderKey);

            return(context.Users.Find(filter).FirstOrDefaultAsync());
        }
        public async Task <dynamic> IncrementById(string userId, string songId)
        {
            var userCollection = MongoWrapper.Database.GetCollection <Models.Musician>(nameof(Models.User));

            var songFilterBuilder = new FilterDefinitionBuilder <Models.Song>();
            var songFilter        = songFilterBuilder.And
                                    (
                songFilterBuilder.Eq(s => s._id, new ObjectId(songId)),
                GeneralUtils.NotDeactivated(songFilterBuilder)
                                    );

            var userFilterBuilder = new FilterDefinitionBuilder <Models.Musician>();
            var userFilter        = userFilterBuilder.And
                                    (
                userFilterBuilder.Eq(u => u._id, new ObjectId(userId)),
                GeneralUtils.NotDeactivated(userFilterBuilder),
                userFilterBuilder.ElemMatch(s => s.Songs, songFilter)
                                    );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.Musician>();
            var userProjection        = userProjectionBuilder
                                        .ElemMatch(m => m.Songs, songFilter);

            var userUpdateBuilder = new UpdateDefinitionBuilder <Models.Musician>();
            var userUpdate        = userUpdateBuilder.Inc($"{nameof(Musician.Songs).WithLowercaseFirstCharacter()}.$.{nameof(Models.Song.TimesPlayed).WithLowercaseFirstCharacter()}", 1);

            var user = await userCollection.FindOneAndUpdateAsync(userFilter, userUpdate, new FindOneAndUpdateOptions <Models.Musician>
            {
                Projection     = userProjection,
                ReturnDocument = ReturnDocument.Before,
            });

            if (user == null)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                return(new ResponseBody
                {
                    Code = ResponseCode.NotFound,
                    Success = false,
                    Message = "Música não encontrada!",
                });
            }

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Success = true,
                Message = "Contador incrementado com sucesso!",
            });
        }
        public async Task <dynamic> UnlikeById(string postId, string commentId)
        {
            var postCollection = MongoWrapper.Database.GetCollection <Models.Post>(nameof(Models.Post));


            var commentFilterBuilder = new FilterDefinitionBuilder <Models.Comment>();
            var commentFilter        = commentFilterBuilder.Eq(c => c._id, new ObjectId(commentId));

            var postFilterBuilder = new FilterDefinitionBuilder <Models.Post>();
            var postFilter        = postFilterBuilder.And
                                    (
                postFilterBuilder.Eq(u => u._id, new ObjectId(postId)),
                GeneralUtils.NotDeactivated(postFilterBuilder),
                postFilterBuilder.ElemMatch(u => u.Comments, commentFilter),
                GeneralUtils.NotDeactivated(postFilterBuilder, p => p.Comments)
                                    );

            ObjectId currentUserId = new ObjectId(this.GetCurrentUserId());

            var commentUpdateBuilder = new UpdateDefinitionBuilder <Models.Post>();
            var commentUpdate        = commentUpdateBuilder.Pull(p => p.Comments[-1].Likes, currentUserId);

            var updateResult = await postCollection.UpdateOneAsync(
                postFilter,
                commentUpdate
                );

            if (updateResult.MatchedCount == 0)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                return(new ResponseBody
                {
                    Code = ResponseCode.NotFound,
                    Success = false,
                    Message = "Comentário não encontrado!",
                });
            }

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Success = true,
                Message = "Comentário Unlikeado com sucesso!",
            });
        }
        /// <summary>
        /// 更改某一子文档
        /// </summary>
        public void Update()
        {
            //更新子文档的字段
            string commentContent = "通过Update修改了";
            FilterDefinitionBuilder <Model2> filterBuilder = Builders <Model2> .Filter;
            //找到父文档,过滤条件为Field2A=2并且Field2B=“2018-01-21T16:00:00.000Z”
            FilterDefinition <Model2> filterFather = filterBuilder.Eq(doc => doc.Field2A, "2")
                                                     & filterBuilder.Eq(doc => doc.Field2B, DateTime.Parse("2018-01-21T16:00:00.000Z"));
            //找到子文档,过滤条件Field1B=1,条件作用与字段Field2C,他是个集合,用来存储子文档
            FilterDefinition <Model2> childFilter = filterBuilder.ElemMatch(
                listField => listField.Field2C, childfield => childfield.Field1B == 1);
            //上述条件的并
            FilterDefinition <Model2> filter = Builders <Model2> .Filter.And(new FilterDefinition <Model2>[] { filterFather, childFilter });

            //方法1:使用XXXX.$.XXXX定位字段
            var update = Builders <Model2> .Update.Set("Field2C.$.Field1A", commentContent);

            UpdateResult updateResult = mongoDBService.DocumentUpdate(collectionName, filter, update);
        }
Exemple #11
0
 public object Match(string arrayProperty, object filter)
 {
     return(InternalBuilder.ElemMatch(arrayProperty, AsMongoFilter(filter)));
 }
Exemple #12
0
        private static Task StartRadioFeeder(RadioCastServer radioCastServer, MongoWrapper mongoWrapper)
        {
            var userCollection = mongoWrapper.Database.GetCollection <Models.Musician>(nameof(Models.User));

            var songSortBuilder = new SortDefinitionBuilder <ProjectedMusicianSong>();
            var songSort        = songSortBuilder
                                  .Descending(nameof(ProjectedMusicianSong.Score));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.Musician>();
            var userFilter        = userFilterBuilder.And
                                    (
                GeneralUtils.NotDeactivated(userFilterBuilder),
                userFilterBuilder.AnyEq("_t", nameof(Models.Musician))
                                    );

            var songFilterBuilder = new FilterDefinitionBuilder <ProjectedMusicianSong>();
            var songFilter        = songFilterBuilder.And
                                    (
                GeneralUtils.NotDeactivated(songFilterBuilder, s => s.Song),
                songFilterBuilder.Eq(s => s.Song.RadioAuthorized, true),
                songFilterBuilder.Eq(s => s.Song.Original, true)
                                    );

            var projectionBuilder = new ProjectionDefinitionBuilder <Models.Musician>();
            var projection        = projectionBuilder.Include(m => m.FullName).Include(m => m.Songs);

            var fsBucket = new GridFSBucket <ObjectId>(mongoWrapper.Database);

            var trackHistory = new List <(IAudioSource, ProjectedMusicianSong)>();

            var onTrackChangedTE = new ManualResetEvent(true);

            radioCastServer.OnTrackChanged += async(s, e) =>
            {
                List <(IAudioSource, ProjectedMusicianSong)> myTrackHistory;
                lock (trackHistory)
                {
                    myTrackHistory = trackHistory.ToList();
                }

                RadioInfoController.CurrentSong = myTrackHistory.Where(th => th.Item1.Equals(e.NewTrack)).Select(th => th.Item2).LastOrDefault();
                LOGGER.Info("Now playing: {}", JsonConvert.SerializeObject(RadioInfoController.CurrentSong));

                onTrackChangedTE.Set();

                if (e.OldTrack == null)
                {
                    return;
                }

                var oldTrack      = myTrackHistory.Where(th => th.Item1.Equals(e.OldTrack)).Select(th => th.Item2).LastOrDefault();
                var oldMusicianId = oldTrack._id;
                var oldTrackId    = oldTrack.Song._id;

                var musSongFilterBuilder = new FilterDefinitionBuilder <Models.Musician>();

                var musSongFilter = musSongFilterBuilder.And
                                    (
                    musSongFilterBuilder.Eq(m => m._id, oldMusicianId),
                    musSongFilterBuilder.ElemMatch(m => m.Songs, sg => sg._id == oldTrackId)
                                    );
                var musSongUpdate = new UpdateDefinitionBuilder <Models.Musician>()
                                    .Inc($"{nameof(Models.Musician.Songs)}.$.{nameof(Song.TimesPlayedRadio)}", 1);

                await userCollection.UpdateOneAsync(musSongFilter, musSongUpdate);

                // Remove oldest, only keep 5 in history
                if (myTrackHistory.Count > 5)
                {
                    lock (trackHistory)
                    {
                        trackHistory.RemoveAt(0);
                    }
                }
            };

            return(Task.Run(async() =>
            {
                while (true)
                {
                    List <(IAudioSource, ProjectedMusicianSong)> myTrackHistory;
                    lock (trackHistory)
                    {
                        myTrackHistory = trackHistory.ToList();
                    }

                    var lookupStageRandomArr = $@"
                    {{
                        $lookup:
                        {{
                            from: ""randomNumbers"",
                            pipeline:
                            [
                                {{ $sample: {{ size: 2 }} }}
                            ],
                            as: ""RandomArr""
                        }}
                    }}
                    ";

                    // OK Vezes totais que a música foi tocada * 0.5
                    // OK Vezes totais que a música foi tocada na rádio * -1
                    // OK Se música está presente na lista das últimas 5 tocadas, -100
                    // OK Se o autor da música está presente na lista das últimas 5 tocadas, -50
                    // OK Pontuação aleatória para cada música, entre - 10 e + 10
                    // OK Número de dias desde o cadastramento da música * -1
                    // OK   Há uma chance de 5% de multiplicar a pontuação resultante por -1 (efeito nostalgia)

                    var scoreStage = $@"
                    {{
                        $addFields:
                        {{
                            ""Score"":
                            {{
                                $add:
                                [
                                    {{
                                        $multiply: [ ""$Song.timesPlayed"", 0.5 ]
                                    }},
                                    {{
                                        $multiply: [ ""$Song.timesPlayedRadio"", -1 ]
                                    }},
                                    {{
                                        $cond:
                                        {{
                                            if:
                                            {{
                                                $in: [ ""$_id"", [ {myTrackHistory.Select(th => $"ObjectId(\"{th.Item2._id.ToString()}\")").DefaultIfEmpty("").Aggregate((s1, s2) => $"{s1.TrimEnd(',')},{s2.TrimEnd(',')},").TrimEnd(',')} ] ]
                                            }},
                                            then: -50,
                                            else: 0
                                        }}
                                    }},
                                    {{
                                        $cond:
                                        {{
                                            if:
                                            {{
                                                $in: [ ""$Song._id"", [ {myTrackHistory.Select(th => $"ObjectId(\"{th.Item2.Song._id.ToString()}\")").DefaultIfEmpty("").Aggregate((s1, s2) => $"{s1.TrimEnd(',')},{s2.TrimEnd(',')},").TrimEnd(',')} ] ]
                                            }},
                                            then: -100,
                                            else: 0
                                        }}
                                    }},
                                    {{
                                        $add:
                                        [ 
                                            {{
                                                $multiply:
                                                [
                                                    {{ $toDecimal: {{ $arrayElemAt: [""$RandomArr.decimal"", 0] }} }},
                                                    21
                                                ]
                                            }}, 
                                            -10
                                        ]
                                    }},
                                    {{
                                        $multiply:
                                        [
                                            {{
                                                $divide:
                                                [
                                                    {{
                                                        $subtract:
                                                        [
                                                            {{ $toDate: ""{DateTime.UtcNow.ToString("o")}"" }},
                                                            {{ $toDate: ""$Song._id"" }}
                                                        ]
                                                    }},
                                                    NumberLong(""86400000"")
                                                ]
                                            }},
                                            {{
                                                $cond:
                                                {{
                                                    if:
                                                    {{
                                                        $gt:
                                                        [
                                                            {{ $toDecimal: {{ $arrayElemAt: [""$RandomArr.decimal"", 1] }} }},
                                                            NumberDecimal(""0.1"")
                                                        ]
                                                    }},
                                                    then: -1,
                                                    else: 1
                                                }}
                                            }}
                                        ]
                                    }}
                                ]
                            }}
                        }}
                    }}";

                    LOGGER.Info("Score stage generated MongoDB query: {}", scoreStage);

                    var pipeline = PipelineDefinitionBuilder
                                   .For <Models.Musician>()
                                   .Match(userFilter)
                                   .Unwind(m => m.Songs, new AggregateUnwindOptions <Models.Musician>
                    {
                        PreserveNullAndEmptyArrays = false,
                        IncludeArrayIndex = null,
                    })
                                   .Project(m => new ProjectedMusicianSong
                    {
                        _id = m._id,
                        Song = (Song)m.Songs,
                        Score = 1,
                    })
                                   .Match(songFilter)
                                   .AppendStage <Musician, ProjectedMusicianSong, ProjectedMusicianSong>(lookupStageRandomArr)
                                   .AppendStage <Musician, ProjectedMusicianSong, ProjectedMusicianSong>(scoreStage)
                                   .Sort(songSort)
                                   .Limit(1);

                    if (LOGGER.IsDebugEnabled)
                    {
                        LOGGER.Debug("Pipeline generated MongoDB query for song: {}", pipeline.ToString());
                    }

                    var findTask = userCollection.AggregateAsync(pipeline, new AggregateOptions
                    {
                        AllowDiskUse = true,
                        BatchSize = 1,
                        UseCursor = true,
                        Comment = "Radio Aggregate Query",
                        TranslationOptions = new ExpressionTranslationOptions
                        {
                            StringTranslationMode = AggregateStringTranslationMode.CodePoints
                        }
                    });

                    var findResult = await findTask;
                    var firstSong = findResult.SingleOrDefault();
                    // If no songs, wait a minute before checking again
                    // Mostly not to strain the CPU on development environments
                    if (firstSong?.Song == null)
                    {
                        Thread.Sleep(TimeSpan.FromMinutes(1));
                        continue;
                    }
                    LOGGER.Info("Next selected song: {}", JsonConvert.SerializeObject(firstSong));
                    var audioRef = firstSong.Song.AudioReference;
                    var gridId = audioRef._id;
                    var fileStreamTask = fsBucket.OpenDownloadStreamAsync(gridId, new GridFSDownloadOptions
                    {
                        Seekable = true,
                        CheckMD5 = false,
                    });
                    var audioSource = new Mp3FileAudioSource(await fileStreamTask, firstSong.Song.Name);
                    // Wait for the radio to need more songs before we add the track we have on our hands
                    while (radioCastServer.TrackCount > 1)
                    {
                        onTrackChangedTE.WaitOne();
                        onTrackChangedTE.Reset();
                    }
                    lock (trackHistory)
                    {
                        trackHistory.Add((audioSource, firstSong));
                    }
                    radioCastServer.AddTrack(audioSource);
                }
            }));
        }
Exemple #13
0
 //
 // 摘要:
 //     Tests that at least one item of the named array element matches a query (see
 //     $elemMatch).
 //
 // 参数:
 //   name:
 //     The name of the element to test.
 //
 //   query:
 //     The query to match elements with.
 //
 // 返回结果:
 //     The builder (so method calls can be chained).
 public static FilterDefinition <BsonDocument> ElemMatch(string name, FilterDefinition <BsonDocument> query)
 {
     return(filter.ElemMatch(name, query));
 }
Exemple #14
0
        public async Task <dynamic> Post([FromBody] TBody requestBody)
        {
            var id = this.GetCurrentUserId();

            DateTime creationDate = DateTime.UtcNow;

            var newUserTask = BindUser(requestBody, creationDate);

            var userCollection = MongoWrapper.Database.GetCollection <TEntity>(nameof(Models.User));

            var userFilterBuilder = new FilterDefinitionBuilder <TEntity>();
            var userFilter        = userFilterBuilder.And
                                    (
                userFilterBuilder.Eq(u => u._id, new ObjectId(id)),
                GeneralUtils.NotDeactivated(userFilterBuilder)
                                    );

            var oldUser = (await userCollection.FindAsync(userFilter)).SingleOrDefault();

            if (oldUser == null)
            {
                Logger.LogError("User with valid JWT id was not found in database! Id: {}", id);
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(new ResponseBody
                {
                    Code = ResponseCode.NotFound,
                    Success = false,
                    Message = "Seu usuário não foi encontrado!",
                });
            }

            var newUser = await newUserTask;

            var gridFsBucket = new GridFSBucket <ObjectId>(MongoWrapper.Database);

            await this.UploadPhoto(requestBody.Foto, gridFsBucket, newUser, creationDate);

            var userUpdate = await CreateUpdateDefinition(oldUser, newUser);

            if (oldUser.Email != oldUser.Email)
            {
                userUpdate = userUpdate.Set(u => u.EmailConfirmed, false);
            }

            var userUpdateTask = userCollection.UpdateOneAsync(userFilter, userUpdate);

            var postCollection = MongoWrapper.Database.GetCollection <Models.Post>(nameof(Models.Post));

            var postFilterBuilder = new FilterDefinitionBuilder <Models.Post>();
            var postFilter        = postFilterBuilder.And
                                    (
                postFilterBuilder.Eq(p => p.Poster._id, oldUser._id),
                GeneralUtils.NotDeactivated(postFilterBuilder)
                                    );
            var postUpdateBuilder = new UpdateDefinitionBuilder <Models.Post>();
            var postUpdate        = postUpdateBuilder.Set(p => p.Poster.Avatar, newUser.Avatar)
                                    .Set(p => p.Poster.FullName, newUser.FullName);

            var commentFilterBuilder     = new FilterDefinitionBuilder <Comment>();
            var commentFilter            = commentFilterBuilder.Eq(c => c.Commenter._id, oldUser._id);
            var postCommentFilterBuilder = new FilterDefinitionBuilder <Models.Post>();
            var postCommentFilter        = postFilterBuilder.And
                                           (
                GeneralUtils.NotDeactivated(postFilterBuilder),
                postCommentFilterBuilder.ElemMatch(p => p.Comments, commentFilter)
                                           );
            var postCommentUpdateBuilder = new UpdateDefinitionBuilder <Models.Post>();
            var postCommentUpdate        = postUpdateBuilder
                                           .Set(p => p.Comments[-1].Commenter.Avatar, newUser.Avatar)
                                           .Set(p => p.Comments[-1].Commenter.FullName, newUser.FullName);

            var postUpdateTask        = postCollection.UpdateManyAsync(postFilter, postUpdate);
            var postCommentUpdateTask = postCollection.UpdateManyAsync(postCommentFilter, postCommentUpdate);

            await userUpdateTask;
            await postUpdateTask;

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Success = true,
                Message = "Usuário editado com sucesso!",
            });
        }
Exemple #15
0
        [HttpGet]//获取一个类别下所有的资产名称和资产编码
        public List <List <string> > Get_ZC_NI(string Type, string Name = null, int n = 0)
        {
            try
            {
                List <string> key   = new List <string>();
                List <string> value = new List <string>();
                if (Name != null)
                {
                    M_Db_Operate m_Db_Operate = new M_Db_Operate();
                    var          collection   = m_Db_Operate.database.GetCollection <SJ_ZC_Model>("ZC_data");
                    FilterDefinitionBuilder <SJ_ZC_Model> builderFilters = Builders <SJ_ZC_Model> .Filter;
                    FilterDefinitionBuilder <SJ_SX_Model> builderFilter  = Builders <SJ_SX_Model> .Filter;
                    var filter = builderFilters.ElemMatch("ZC_SX", builderFilter.And(builderFilter.Eq("V", Name), builderFilter.Eq("mp", "0004")));
                    var result = collection.Find(filter).ToList();
                    var s      = from one in result
                                 from sx in one.ZC_SX
                                 where sx.mp == "0004"
                                 select sx.V;
                    List <string> sn = s.GroupBy(p => p).Select(g => g.First()).ToList();
                    s = from one in result
                        from sx in one.ZC_SX
                        where sx.mp == "0003"
                        select sx.V;
                    List <string> si = new List <string>();
                    if (Name != null)
                    {
                        si = s.Distinct().ToList();
                    }
                    List <List <string> > resu = new List <List <string> >()
                    {
                        sn, si
                    };
                    return(resu);
                }
                else
                {
                    M_Db_Operate m_Db_Operate = new M_Db_Operate();
                    var          collection   = m_Db_Operate.database.GetCollection <SJ_ZC_Model>("ZC_data");
                    FilterDefinitionBuilder <SJ_ZC_Model> builderFilters = Builders <SJ_ZC_Model> .Filter;
                    FilterDefinitionBuilder <SJ_SX_Model> builderFilter  = Builders <SJ_SX_Model> .Filter;
                    FilterDefinition <SJ_ZC_Model>        filter         = builderFilters.ElemMatch("ZC_SX", builderFilter.And(builderFilter.Eq("V", Type), builderFilter.Eq("mp", "0002")));
                    var result = collection.Find(filter).ToList();
                    var s      = from one in result
                                 from sx in one.ZC_SX
                                 where sx.mp == "0004"
                                 select sx.V;
                    List <string> sn = s.GroupBy(p => p).Select(g => g.First()).ToList();
                    s = from one in result
                        from sx in one.ZC_SX
                        where sx.mp == "0003"
                        select sx.V;
                    List <string> si = new List <string>();
                    if (Name != null)
                    {
                        si = s.Distinct().ToList();
                    }
                    List <List <string> > resu = new List <List <string> >()
                    {
                        sn, si
                    };
                    return(resu);
                }
                //M_Db_Operate m_Db_Operate = new M_Db_Operate();
                //var collection = m_Db_Operate.database.GetCollection<SJ_ZC_Model>("ZC_data");
                //FilterDefinitionBuilder<SJ_ZC_Model> builderFilter = Builders<SJ_ZC_Model>.Filter;
                ////约束条件
                //List<FilterDefinition<SJ_ZC_Model>> builderFilterss = new List<FilterDefinition<SJ_ZC_Model>>();
                //for (int i = 0; i < key.Count; i++)
                //    builderFilterss.Add(builderFilter.Eq(key[i], value[i]));
                //FilterDefinition<SJ_ZC_Model> filter = builderFilter.And(builderFilterss.ToArray());
                ////获取数据
                //var res = collection.Find(filter).Skip(n * 100).ToList();
                //var s = from one in res
                //         from sx in one.ZC_SX
                //         where sx.mp == "0004"
                //         select sx.V;
                //List<string> sn = s.GroupBy(p => p).Select(g => g.First()).ToList();
                //s = from one in res
                //    from sx in one.ZC_SX
                //    where sx.mp == "0003"
                //    select sx.V;
                //List<string> si = new List<string>();
                //if (Name != null)
                //    si = s.Distinct().ToList();
                //var res = m_Db_Operate.Inquire_Data(collection, key, value).Skip(1).Take(100).ToList();

                /*List<string> name = new List<string>();
                 * List<string> ID = new List<string>();
                 * for (int i = 0; i < res.Count; i++)
                 * {
                 *  for (int j = 0; j < res[i].ZC_SX.Count; j++)
                 *  {
                 *      if (res[i].ZC_SX[j].mp == "0004")
                 *          if (!name.Contains(res[i].ZC_SX[j].V))
                 *              name.Add(res[i].ZC_SX[j].V);
                 *      if(res[i].ZC_SX[j].mp == "0003")
                 *          ID.Add(res[i].ZC_SX[j].V);
                 *  }
                 * }*/
            }
            catch (Exception e)
            {
                return(null);
            }
        }