using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CSharpUtil; using StackExchange.Redis; using MongoDB; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Bson.Serialization; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace RedisTransfer { internal class Trans2MongoDB : ITransfer { public void Trans(int db = 0) { var redis = Redis.Rdb(db); var mdb = Mongo.Mdb(); var collection = mdb.GetCollection("ylsj2019taptap"); Console.WriteLine("start"); var s = File.ReadAllLines("keys.txt"); s.ToList().ForEach(x => { var t = redis.KeyType(x); switch (t) { case RedisType.String: { var v = redis.StringGet(x).ToString(); var bson = new BsonDocument("key",x); // (x, BsonDocument.Parse()); if (BsonDocument.TryParse(v, out var bo)) { bson.Add("value", bo); } else { bson.Add("value", v); } collection.InsertOne(bson); break; } case RedisType.Hash: { var jo = new BsonDocument(); redis.HashGetAll(x).ToList().ForEach(x => { if (BsonDocument.TryParse(x.Value.ToString(), out var bo)) { jo.Add(x.Name, bo); } else { jo.Add(x.Name, x.Value.ToString()); } //jo.Add(x.Name, BsonDocument.Parse(x.Value.ToString())) } ); var bson = new BsonDocument("key", x); bson.Add("value", jo); collection.InsertOne(bson); break; } case RedisType.List: { var ja = new BsonArray(); foreach (var r in redis.ListRange(x, 0, -1)) { if (BsonDocument.TryParse(r.ToString(), out var bo)) { ja.Add(bo); } else { ja.Add(r.ToString()); } } var bson = new BsonDocument("key", x); bson.Add("value", ja); collection.InsertOne(bson); break; } case RedisType.Set: { var ja = new BsonArray(); foreach (var r in redis.SetMembers(x)) { if (BsonDocument.TryParse(r.ToString(), out var bo)) { ja.Add(bo); } else { ja.Add(r.ToString()); } } var bson = new BsonDocument("key", x); bson.Add("value", ja); collection.InsertOne(bson); //Console.WriteLine(new JProperty(x, ja).ToString() + ","); break; } case RedisType.SortedSet: { var ja = new BsonArray(); foreach (var r in redis.SortedSetRangeByScoreWithScores(x)) { if (BsonDocument.TryParse(r.ToString(), out var bo)) { ja.Add(bo); } else { ja.Add(r.ToString()); } } var bson = new BsonDocument("key", x); bson.Add("value", ja); collection.InsertOne(bson); //Console.WriteLine(new JProperty(x, ja).ToString() + ","); break; } default: Console.WriteLine("不支持的redis数据类型"); break; } }); Console.WriteLine("end"); } } }