mongo的objectid如果重复插入如何解决

本文介绍了一个从实时股票报价(stockquotes)同步数据至历史报价(HistoricalQuote)的策略,特别是如何处理重复插入相同ObjectId的问题,通过为每日最新的股票数据创建新的ObjectId来确保数据的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这边遇到一个从stockquotes插入每天的股票数据到HistoricalQuote的情况,在重复插入这条一样的ObjectId的时候要新建一条objectId。


        public void PopulateLatestStockQuotesToHistoricalQuotesPerDay()
        {
           
                lock (Locker)
                {
                    Task a = new Task(() =>
                    {
                       
                        Logger.Debug("Getting LatestStockQuoteInfo");
                        var tradeDate = DateTime.UtcNow;
                        var lastWriteTime = MarketDataProvider.GetLastWriteTime();
                        if (lastWriteTime.ToShortDateString() != tradeDate.ToShortDateString())
                        {
                            Logger.Debug("The show2003 Dbf doesn't change intraday.");
                            return;
                        }
                        var stockQuotesInfo = _uow.StockQuotesInfo.GetAll().ToList();
                        foreach (var stockQuote in stockQuotesInfo)
                        {
                            var histQuotes = _uow.HistoricalQuotes.GetAll().Where(m => m.StockCode == stockQuote.SecurityCode).ToList();
                           
                            if (histQuotes.Count > 0)
                            {
                                var latestQuote = histQuotes.OrderByDescending(m => m.TradeDate).First();
                                if (latestQuote.TradeDate < tradeDate)
                                {
                                    HistoricalQuote historicalQuote = Mapper.Map<StockQuoteInfo, HistoricalQuote>(stockQuote);
                                    historicalQuote.Id = new MongoDB.Bson.ObjectId();
                                    historicalQuote.TradeDate = tradeDate;
                                    _uow.HistoricalQuotes.Add(historicalQuote);
                                }
                            }
                            else
                            {
                                HistoricalQuote historicalQuote = Mapper.Map<StockQuoteInfo, HistoricalQuote>(stockQuote);
                                //historicalQuote.Id = new MongoDB.Bson.ObjectId();
                                historicalQuote.TradeDate = tradeDate;
                                _uow.HistoricalQuotes.Add(historicalQuote);
                            }
                         
                        }
                        Logger.Debug("PopulateLatestStockQuotesToHistoricalQuotesPerDay Completed");
                    });
                    a.Start();
                    Task.WaitAll(a);
                }
           

        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值