Пример #1
0
        /// <summary>
        /// 是否包含此记录
        /// </summary>
        public virtual bool ContainsRecord(MongoHouseEntity houseEntity)
        {
            var db             = _client.GetDatabase(this._mongoDBName);
            var collectionName = $"{ConstMongoTables.HouseData}_{houseEntity.City}";

            return(db.GetCollection <MongoHouseEntity>(collectionName).AsQueryable().Any(x => x.OnlineURL == houseEntity.OnlineURL));
        }
Пример #2
0
        public bool WriteRecord(MongoHouseEntity houseEntity)
        {
            if (string.IsNullOrEmpty(houseEntity?.Id) ||
                string.IsNullOrEmpty(houseEntity?.City) ||
                string.IsNullOrEmpty(houseEntity?.OnlineURL))
            {
                Console.WriteLine($"houseEntity is empty, skip it.");
                return(false);
            }

            var collectionName = $"{ConstMongoTables.HouseData}_{houseEntity.City}";

            InitCollection(collectionName);
            if (ContainsRecord(houseEntity))
            {
                Console.WriteLine($"house:{houseEntity.Title}-{houseEntity.OnlineURL} exits, skip it.");
            }
            var database = _client.GetDatabase(this._mongoDBName);
            var query    = Builders <MongoHouseEntity> .Filter.Eq(x => x.Id, houseEntity.Id);

            var update = Builders <MongoHouseEntity> .Update.Set(x => x.Latitude, houseEntity.Latitude)
                         .Set(x => x.Longitude, houseEntity.Longitude)
                         .Set(x => x.Id, houseEntity.Id)
                         .Set(x => x.City, houseEntity.City)
                         .Set(x => x.CreateTime, houseEntity.CreateTime)
                         .Set(x => x.Labels, houseEntity.Labels)
                         .Set(x => x.Location, houseEntity.Location)
                         .Set(x => x.OnlineURL, houseEntity.OnlineURL)
                         .Set(x => x.PicURLs, houseEntity.PicURLs)
                         .Set(x => x.Price, houseEntity.Price)
                         .Set(x => x.PubTime, houseEntity.PubTime)
                         .Set(x => x.RentType, houseEntity.RentType)
                         .Set(x => x.Source, houseEntity.Source)
                         .Set(x => x.Tags, houseEntity.Tags)
                         .Set(x => x.Text, houseEntity.Text)
                         .Set(x => x.Title, houseEntity.Title)
                         .Set(x => x.Timestamp, houseEntity.Timestamp)
                         .Set(x => x.UpdateTime, DateTime.Now);

            var options = new FindOneAndUpdateOptions <MongoHouseEntity> {
                ReturnDocument = ReturnDocument.After, IsUpsert = true
            };
            var result = database.GetCollection <MongoHouseEntity>(collectionName).FindOneAndUpdate(query, update, options);

            Console.WriteLine($"save {houseEntity.Id} to {collectionName} mongodb finish, result:{result != null}");
            return(result != null);
        }
Пример #3
0
        /// <summary>
        /// 写入数据
        /// </summary>
        public virtual async Task <bool> WriteRecordAsync(MongoHouseEntity houseEntity)
        {
            if (null == houseEntity || string.IsNullOrEmpty(houseEntity.Id) || string.IsNullOrEmpty(houseEntity.City))
            {
                _logger.LogInformation($"house没有ID,跳过。");
                return(false);
            }
            //var dateValue = houseEntity.PubTime.ToString("yyyyMM");
            var collectionName = $"{ConstMongoTables.HouseData}_{houseEntity.City}";

            await InitCollectionAsync(collectionName);

            var containsRecord = await ContainsRecordAsync(houseEntity);

            if (containsRecord)
            {
                _logger.LogInformation($"house:{houseEntity.Title} 已存在,直接跳过。");
                return(true);
            }
            await _client.GetDatabase(this._mongoDBName).GetCollection <MongoHouseEntity>(collectionName).InsertOneAsync(houseEntity);

            _logger.LogInformation($"write collectionName:{collectionName}, house:{houseEntity.Title} success!");
            return(true);
        }