¿Cuál es la mejor manera de convertir una base de datos SQL, digamos 1 de la tabla, a un mongoDB documento?

Supongo que podría usar un C# controlador e implementar un bucle, que selecciona cada fila de la tabla y guarda en Mongo.. sin Embargo, estoy buscando una mejor manera de convertir una gran cantidad de datos..

MongoDB que la filosofía es para empujar mucho de este tipo de cosa para el conductor y / o aplicación de nivel … así que yo estaría de acuerdo con Matt por debajo de … la mejor opción es el uso de la C# no sólo porque le ahorrará MUCHO de molestia (con es bueno HIJO lib), sino también porque se puede tratar con muchos de los datos de los problemas de conversión mucho más fácil de decir que de un vertedero o de exportación, etc.

OriginalEl autor Stewie Griffin | 2010-12-07

5 Comentarios

  1. 8

    El controlador de manera que es por LEJOS el más sencillo. La importación/exportación de herramientas son fantásticos, pero sólo si usted está usando como un par. Usted está adentro para un paseo salvaje, si la tabla incluye las fechas y se trate de la exportación de la base de datos y la importación en mongo.

    Estás de suerte, en c#. Estamos usando ruby, y tienen un 32million fila de la tabla emigraron a mongo. Nuestra conclusión solución fue diseñar un loco instrucción sql en postgres que la salida json (incluyendo algunos bastante desacoplados cosas para obtener las fechas de ir correctamente) y canalizar la salida de la consulta en la línea de comandos en mongoimport. Se tomó una increíblemente frustrante día para escribir, y no es el tipo de cosa que nunca se puede realmente ser cambiado.

    Así que si usted puede conseguir lejos con él, el uso de ado.net con el mongo conductor. Si no, te deseo lo mejor 🙂

    (tenga en cuenta que esto viene de un total de mongo fanboi)

    además del formato de la fecha, hay otros tipos de Mongo no como durante la conversión?
    la fecha fue el verdadero asesino para nosotros, porque mongo ve como una de 64 bits número de pasos desde la época, y todo lo demás que uso los usos de 32 bits fechas. Tuvimos problemas en la importación de tsv modo, porque aparentemente de acuerdo a 10gen, una cadena entre comillas no puede tener un salto de línea en un archivo tsv. Nos encontramos con otros problemas también, pero ellos fueron más específicos a nuestras herramientas.

    OriginalEl autor Matt Briggs

  2. 13

    Este es el script de importación que estoy utilizando para la Importación de datos desde SQL server a Mongodb que se encuentra en mi cuadro.
    Este código se acaba de crear una tabla similar(existentes en SQL DB) en MongoDB.
    Usted puede proporcionar la lista de tabla a importar como separados por comas y todos ellos se pueden importar sin problemas.

    static void Main(string[] args)
    {
    List<string> tablelist = new List<string>();
    if (!args[0].Contains(','))
    tablelist.Add(args[0]);
    else
    tablelist.AddRange(args[0].Split(','));
    string sqlconnectionstring = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    var connectionString = "mongodb://localhost/?safe=true;w=1;wtimeout=30s";
    var safemode = SafeMode.True;
    MongoServer server = MongoServer.Create(connectionString);
    MongoDatabase db = server.GetDatabase("testdb");
    MongoCollection<MongoDB.Bson.BsonDocument> coll = db.GetCollection<BsonDocument>("test");
    //coll.Find().Count();
    int i = 0;
    foreach (string table in tablelist)
    {
    using (SqlConnection conn = new SqlConnection(sqlconnectionstring))
    {
    string query = "select * from " + table;
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
    ///Delete the MongoDb Collection first to proceed with data insertion
    if (db.CollectionExists(table))
    {
    MongoCollection<BsonDocument> collection = db.GetCollection<BsonDocument>(table);
    collection.Drop();
    }
    conn.Open();
    SqlDataReader reader = cmd.ExecuteReader();
    List<BsonDocument> bsonlist = new List<BsonDocument>(1000);
    while (reader.Read())
    {
    if (i == 1000)
    {
    using (server.RequestStart(db))
    {
    //MongoCollection<MongoDB.Bson.BsonDocument> 
    coll = db.GetCollection<BsonDocument>(table);
    coll.InsertBatch(bsonlist);
    bsonlist.RemoveRange(0, bsonlist.Count);
    }
    i = 0;
    }
    ++i;
    BsonDocument bson = new BsonDocument();
    for (int j = 0; j < reader.FieldCount; j++)
    {
    if (reader[j].GetType() == typeof(String))
    bson.Add(new BsonElement(reader.GetName(j), reader[j].ToString()));
    else if ((reader[j].GetType() == typeof(Int32)))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetInt32(j))));
    }
    else if (reader[j].GetType() == typeof(Int16))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetInt16(j))));
    }
    else if (reader[j].GetType() == typeof(Int64))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetInt64(j))));
    }
    else if (reader[j].GetType() == typeof(float))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetFloat(j))));
    }
    else if (reader[j].GetType() == typeof(Double))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetDouble(j))));
    }
    else if (reader[j].GetType() == typeof(DateTime))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetDateTime(j))));
    }
    else if (reader[j].GetType() == typeof(Guid))
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetGuid(j))));
    else if (reader[j].GetType() == typeof(Boolean))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetBoolean(j))));
    }
    else if (reader[j].GetType() == typeof(DBNull))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonNull.Value));
    }
    else if (reader[j].GetType() == typeof(Byte))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader.GetByte(j))));
    }
    else if (reader[j].GetType() == typeof(Byte[]))
    {
    bson.Add(new BsonElement(reader.GetName(j), BsonValue.Create(reader[j] as Byte[])));
    }
    else
    throw new Exception();
    }
    bsonlist.Add(bson);
    }
    if (i > 0)
    {
    using (server.RequestStart(db))
    {
    //MongoCollection<MongoDB.Bson.BsonDocument> 
    coll = db.GetCollection<BsonDocument>(table);
    coll.InsertBatch(bsonlist);
    bsonlist.RemoveRange(0, bsonlist.Count);
    }
    i = 0;
    }
    }
    }
    }
    }
    Lo de la referencia que tengo que agregar para usar el tipo de MongoServer, MongoDatabase y así sucesivamente? He MongoDB.HIJO, MongoDB.El conductor y MongoDB.El controlador.Core, pero esas líneas de código son de color rojo en VIsual Studio.
    Yo también estoy mirando para ejecutar este código, pero no se puede compilar con la actual MongoDB paquete de controladores. Clases de MongoServer, MongoDatabase no se encuentran ? Gracias, LA Tipo

    OriginalEl autor user_v

  3. 1

    Tuve que crear la herramienta para hacerlo.
    Se utiliza bcp.exe para exportar datos a xml, a continuación, convertir a json utilizando Newtonsoft JSON.NET y, a continuación, mongoimport para importar. Le tomó menos de un día, pero las fechas no son compatibles.

    Algunas código de abajo (muy sin limpiar:)

    bcp.exe utiliza una sintaxis similar a:
    bcp.exe «SELECT * from datos geográficos.dbo.Los aeropuertos DE XML RAW(‘Fila’),RAÍZ («Root»), los ELEMENTOS» queryout D:\TEMP\tmp1045.tmp -Uxxxx -Pxxxx -Sxxxx -w -r «» -q

    json:

    var r=XmlReader.Create("file://D:/1.xml");
    XmlDocument xdoc=new XmlDocument();
    xdoc.Load(r);
    string result="";
    //o["Root"]["Airport"];
    foreach(XmlNode n in xdoc.ChildNodes[0]){
    var rr= JsonConvert.SerializeXmlNode(n);    
    JObject o=JObject.Parse(rr);    
    var co=o.Children().Children().First();     
    foreach (JToken c in co.Children().Where(cc=>cc.Type==JTokenType.Property).ToList()){                   
    var prop=c as JProperty;            
    double d;
    if (double.TryParse(co[prop.Name].Value<string>(),out d))
    {
    co[prop.Name] = d;
    }           
    //c.Value<string>().Dump();
    //c.Value<string>().Dump();
    //co[c.Name]
    }
    //co["APT_Latitude"].Value<decimal>().Dump();       
    result=result + co.ToString(Newtonsoft.Json.Formatting.None)+"\r\n";
    }
    File.WriteAllText("D:/1.json",result);
    //result.Dump();

    Mongoimport:
    D:\MongoDB\mongoimport.exe -c «prueba» -d «MongoStatic» 1.json >1

    OriginalEl autor Vladekk

  4. 1

    Si usted está jugando con Ruby, he de hacer una joya que le ayuda a hacer esto: http://mongify.com/.

    Código fuente se puede encontrar en: https://github.com/anlek/mongify/

    Realmente sencilla y directa, la definición de su esquema y cómo se debe traducir en mongodb. Incluyendo la incorporación, el cambio de nombre de las tablas, cambiar el nombre de los campos y un montón de otras opciones.

    OriginalEl autor Andrew K

  5. 0

    Tanto la Norma & samus c# mongo de soporte de controladores clases inflexibles pueden pasar como documentos. Significa que su fría como Nhiberbate y LINQ to SQL.

    ASÍ que mi idea es, usted puede utilizar un LINQ to SQL para crear una entidad en c# (clases que representan las tablas) para recuperar los datos de sql server y se puede utilizar el mismo establecimiento inflexible de tipos de clase para la inserción en mongo db.

    Asegúrate de que tus clases deben tener un mongo identificador atributo (en Norma), en uno de los campo. Esto es para generar un identificador único para un documento.

    OriginalEl autor RameshVel

Dejar respuesta

Please enter your comment!
Please enter your name here