{"id":95148,"date":"2020-09-25T19:43:09","date_gmt":"2020-09-25T17:43:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb"},"modified":"2020-09-25T19:43:09","modified_gmt":"2020-09-25T17:43:09","slug":"14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","title":{"rendered":"14 cosas que desear\u00eda haber sabido antes de comenzar a trabajar con MongoDB","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>La traducci\u00f3n del art\u00edculo ha sido preparada en la v\u00edspera del inicio del curso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\">Bases de datos no relacionales<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"14 cosas que desear\u00eda haber sabido antes de comenzar a trabajar con MongoDB\" src=\"\/wp-content\/uploads\/2020\/09\/9b4979be27e0090543b28150d90fa8df.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Puntos clave:<\/p>\n<ul>\n<li>Es crucial desarrollar un esquema a pesar de que en MongoDB no es obligatorio.<\/li>\n<li>De igual manera, los \u00edndices deben ajustarse a su esquema y patrones de acceso. <\/li>\n<li>Evite el uso de objetos grandes y matrices extensas.<\/li>\n<li>Tenga cuidado con las configuraciones de MongoDB, especialmente en lo que respecta a la seguridad y la confiabilidad.<\/li>\n<li>En MongoDB no hay un optimizador de consultas, por lo que debe tener cuidado al realizar operaciones de consulta.<\/li>\n<\/ul>\n<p>\nHe estado trabajando con bases de datos durante mucho tiempo, pero solo recientemente descubr\u00ed MongoDB. Hay algunas cosas que me hubiera gustado saber antes de comenzar a trabajar con ella. Cuando una persona ya tiene experiencia en un \u00e1rea determinada, tiene preconcebidas ideas sobre lo que son las bases de datos y lo que hacen. Con la esperanza de facilitar la tarea de comprensi\u00f3n a otras personas, presento una lista de errores comunes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Crear un servidor MongoDB sin autenticaci\u00f3n<\/h3>\n<p>\nDesafortunadamente, MongoDB se instala por defecto sin autenticaci\u00f3n. Para una estaci\u00f3n de trabajo accesible localmente, esta pr\u00e1ctica es aceptable. Pero dado que MongoDB es un sistema multiusuario que tiende a consumir grandes cantidades de memoria, ser\u00e1 mejor instalarlo en un servidor con la m\u00e1xima cantidad de memoria posible en sus condiciones, incluso si solo planea usarlo para desarrollo. La instalaci\u00f3n en el servidor a trav\u00e9s del puerto por defecto puede ser problem\u00e1tica, especialmente si en la consulta se puede ejecutar cualquier c\u00f3digo en JavaScript (por ejemplo, <code>$where<\/code> como idea para <noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">inyecci\u00f3n<\/a><\/noindex>). <\/p>\n<p>Existen varios m\u00e9todos de autenticaci\u00f3n, pero la forma m\u00e1s sencilla es establecer un ID\/contrase\u00f1a para el usuario. Use esta idea mientras piensa en una autenticaci\u00f3n m\u00e1s elaborada basada en <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-ldap-external\/\">LDAP.<\/a><\/noindex>. En t\u00e9rminos de seguridad, MongoDB debe actualizarse constantemente, y siempre se deben revisar los registros en busca de accesos no autorizados. Por ejemplo, me gusta elegir otro puerto como el puerto por defecto.<\/p>\n<h3>No olvide vincular la superficie de ataque a MongoDB<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/\">Lista de verificaci\u00f3n de seguridad de MongoDB<\/a><\/noindex> contiene buenos consejos para reducir el riesgo de infiltraci\u00f3n en la red y fuga de datos. Es f\u00e1cil despreciar y decir que un servidor de desarrollo no necesita un alto nivel de seguridad. Sin embargo, no es tan simple y esto se aplica a todos los servidores de MongoDB. En particular, si no hay una raz\u00f3n convincente para usar <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/command\/mapReduce\/#dbcmd.mapReduce\">mapReduce<\/a><\/noindex><\/code>, <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/command\/group\/#dbcmd.group\">group<\/a><\/noindex><\/code> o <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/operator\/query\/where\/#op._S_where\">$where<\/a><\/noindex>, se debe desactivar el uso de c\u00f3digo arbitrario en JavaScript, escribiendo en el archivo de configuraci\u00f3n <code><noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">javascriptEnabled:false<\/a><\/noindex><\/code>. Dado que en MongoDB est\u00e1ndar los archivos de datos no est\u00e1n cifrados, es razonable ejecutar MongoDB con <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/#run-mongodb-with-a-dedicated-user\">Usuario Dedicado<\/a><\/noindex>, que tiene acceso completo a los archivos, con acceso limitado solo para \u00e9l y la posibilidad de usar sus propios medios de control de acceso al sistema de archivos.<\/p>\n<h3>Error en el dise\u00f1o del esquema<\/h3>\n<p>\nMongoDB no utiliza esquema. Pero esto no significa que el esquema no sea necesario. Si solo desea almacenar documentos sin un esquema coherente, se puede hacer de manera r\u00e1pida y sencilla, pero luego recuperarlos puede ser <noindex><a rel=\"nofollow\" href=\"https:\/\/www.compose.com\/articles\/mongodb-with-and-without-schemas\/\">incre\u00edblemente complicado<\/a><\/noindex>. <\/p>\n<p>El art\u00edculo cl\u00e1sico \u00ab<i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mongodb.com\/blog\/post\/6-rules-of-thumb-for-mongodb-schema-design-part-1\">6 reglas emp\u00edricas para dise\u00f1ar esquemas de MongoDB\u00bb<\/a><\/noindex><\/i> vale la pena leerlo, y funciones como <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/schema-explorer\/\">Explorador de Esquemas<\/a><\/noindex> en la herramienta externa Studio 3T, deber\u00edan usarse para revisiones regulares de esquemas.<\/p>\n<h3>No se olvide del orden de clasificaci\u00f3n<\/h3>\n<p>\nOlvidar el orden de clasificaci\u00f3n puede ser lo m\u00e1s decepcionante y perder m\u00e1s tiempo que al usar cualquier otra configuraci\u00f3n incorrecta. Por defecto, MongoBD utiliza <noindex><a rel=\"nofollow\" href=\"https:\/\/jira.mongodb.org\/browse\/SERVER-1920\">clasificaci\u00f3n binaria<\/a><\/noindex>. Pero seguramente no ser\u00e1 \u00fatil para nadie. Las clasificaciones sensibles a may\u00fasculas, acentos, y binarias se consideraban curiosos anacronismos junto a cuentas, caftanes y bigotes rizados ya en la d\u00e9cada de 1980. Ahora, su uso es imperdonable. En la vida real, 'moto' es lo mismo que 'Moto'. Y 'Britania' y 'britania' son el mismo lugar. La letra min\u00fascula es simplemente el equivalente en may\u00fascula. Y no me obligues a hablar sobre la clasificaci\u00f3n de diacr\u00edticos. Al crear una base de datos en MongoDB, utilice par\u00e1metros de clasificaci\u00f3n que ignoren acentos y <noindex><a rel=\"nofollow\" href=\"https:\/\/weblogs.sqlteam.com\/dang\/archive\/2009\/07\/26\/Collation-Hell-Part-1.aspx\">may\u00fasculas<\/a><\/noindex>, que correspondan al idioma y <noindex><a rel=\"nofollow\" href=\"https:\/\/derickrethans.nl\/mongodb-collation-revised.html\">cultura de los usuarios del sistema<\/a><\/noindex>. As\u00ed simplificar\u00e1 en gran medida la b\u00fasqueda de datos de texto.<\/p>\n<h3>Crear colecciones con documentos grandes<\/h3>\n<p>\nMongoDB se complace en albergar grandes documentos de hasta 16 MB en colecciones, y <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/gridfs\/#gridfs\">GridFS<\/a><\/noindex> est\u00e1 dise\u00f1ado para documentos que superan los 16 MB. Sin embargo, aunque se pueden almacenar grandes documentos all\u00ed, no es la mejor idea mantenerlos en ese lugar. MongoDB funcionar\u00e1 mejor si almacenas documentos individuales de unos pocos kilobytes, vi\u00e9ndolos m\u00e1s como filas en una amplia tabla SQL. Los grandes documentos pueden causar problemas con <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/mongodb\/comments\/573fqr\/question_mongodb_terrible_performance_for_a\/\">el rendimiento<\/a><\/noindex>.<\/p>\n<h3>La creaci\u00f3n de documentos con grandes arreglos <\/h3>\n<p>\nLos documentos pueden contener arreglos. Es mejor si la cantidad de elementos en el arreglo est\u00e1 lejos de alcanzar n\u00fameros de cuatro d\u00edgitos. Si se a\u00f1aden elementos al arreglo con frecuencia, puede sobrepasar el documento que lo contiene, y necesitar\u00e1s <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/data-model-operations\/#document-growth\">moverlo<\/a><\/noindex>, lo que significa que tendr\u00e1s que <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/write-performance\/#document-growth\">actualizar los \u00edndices<\/a><\/noindex>. Al reindexar un documento con un gran arreglo, los \u00edndices a menudo se sobrescriben, ya que existe una <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/index-multikey\/\">entrada<\/a><\/noindex>, que almacena su \u00edndice. Esta reindexaci\u00f3n tambi\u00e9n ocurre cuando se inserta o elimina un documento. <\/p>\n<p>En MongoDB existe lo que se llama el <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/mmapv1\/#record-allocation-strategies\">\u00abcoeficiente de llenado\u00bb<\/a><\/noindex>, que proporciona espacio para el crecimiento de los documentos, para minimizar este problema. <br \/>\nPuedes pensar que podr\u00edas prescindir de la indexaci\u00f3n de arreglos. Desafortunadamente, debido a la falta de \u00edndices, pueden surgir otros problemas. Dado que los documentos se escanean de principio a fin, buscar elementos al final del arreglo tomar\u00e1 m\u00e1s tiempo, y la mayor\u00eda de las operaciones relacionadas con dicho documento ser\u00e1n <noindex><a rel=\"nofollow\" href=\"http:\/\/grokbase.com\/t\/gg\/mongodb-user\/128r0h5gzw\/inserting-into-300-000-size-embedded-array-is-slow-even-w-o-indexes\">lentas<\/a><\/noindex>. <\/p>\n<h3>No olvides que el orden de las etapas en la agregaci\u00f3n es importante<\/h3>\n<p>\nEn un sistema de base de datos con un optimizador de consultas, las consultas que escribes son explicaciones de lo que deseas obtener, no de c\u00f3mo obtenerlo. Este mecanismo funciona de manera an\u00e1loga a hacer un pedido en un restaurante: normalmente solo pides un plato, sin dar instrucciones detalladas al chef.<\/p>\n<p>En MongoDB, t\u00fa instruyes al chef. Por ejemplo, debes asegurarte de que los datos pasen a trav\u00e9s de <code>reduce<\/code> tan pronto como sea posible en la cadena de procesamiento con <code>$match<\/code> y <code>$project<\/code>, y que la clasificaci\u00f3n ocurra solo despu\u00e9s <code>reduce<\/code>, y que la b\u00fasqueda se realiza exactamente en el orden que necesita. La presencia de un optimizador de consultas que elimina el trabajo innecesario, ordena las etapas de manera \u00f3ptima y elige el tipo de conexi\u00f3n, puede consentirlo. En MongoDB, tiene m\u00e1s control a expensas de la conveniencia.<\/p>\n<p>Herramientas como <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/\">Studio 3T<\/a><\/noindex> simplificar\u00e1n la construcci\u00f3n de consultas de agregaci\u00f3n en <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/build-mongodb-aggregation-queries\/\">MongoDB<\/a><\/noindex>. La funci\u00f3n Aggregation Editor le permitir\u00e1 aplicar operadores de tuber\u00eda etapa por etapa, as\u00ed como verificar los datos de entrada y salida en cada etapa para facilitar la depuraci\u00f3n. <\/p>\n<h3>El uso de escritura r\u00e1pida<\/h3>\n<p>\nNunca configure en MongoDB par\u00e1metros de escritura con alta velocidad pero baja confiabilidad. Este modo <i>\u00abfile-and-forget\u00bb<\/i> parece r\u00e1pido, ya que el comando devuelve antes de que se realice la escritura. Si el sistema falla antes de que los datos se escriban en el disco, se perder\u00e1n y quedar\u00e1n en un estado inconsistente. Afortunadamente, el MongoDB de 64 bits incluye registro. <\/p>\n<p>Los motores de almacenamiento MMAPv1 y WiredTiger utilizan registro para prevenir esto, aunque WiredTiger puede recuperarse hasta el \u00faltimo punto de control consistente <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/wiredtiger\/#storage-wiredtiger-checkpoints\">, si el registro est\u00e1 deshabilitado.<\/a><\/noindex>El registro garantiza que la base de datos est\u00e9 en un estado consistente despu\u00e9s de la recuperaci\u00f3n y almacena todos los datos hasta el momento de la escritura en el registro. La frecuencia de las escrituras se ajusta mediante el par\u00e1metro<\/p>\n<p>Para asegurarse de que las escrituras sean confiables, aseg\u00farese de que el registro est\u00e9 habilitado en el archivo de configuraci\u00f3n <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#storage.journal.commitIntervalMs\">intervaloDeCompromisoMs<\/a><\/noindex><\/code>. <\/p>\n<p>, y que la frecuencia de las escrituras coincida con la cantidad de informaci\u00f3n que puede permitirse perder. <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#configuration-file\">(storage.journal.enabled<\/a><\/noindex>)<\/code>Ordenar sin \u00edndice<\/p>\n<h3>Al buscar y agregar, a menudo surge la necesidad de ordenar datos. Esperemos que esto se realice en una de las etapas finales, despu\u00e9s de filtrar los resultados para reducir la cantidad de datos a ordenar. E incluso en ese caso, necesitar\u00e1<\/h3>\n<p>\n. Puede utilizar un \u00edndice simple o compuesto. <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/mongodb-index-strategy\/\">el \u00edndice<\/a><\/noindex>Si no hay un \u00edndice adecuado, MongoDB prescindir\u00e1 de \u00e9l. Hay una limitaci\u00f3n de memoria de 32 MB en el tama\u00f1o total de todos los documentos en <\/p>\n<p>la operaci\u00f3n de ordenaci\u00f3n <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.org\/manual\/reference\/limits\/#Sort-Operations\">, y si MongoDB alcanza este l\u00edmite, emitir\u00e1 un error o devolver\u00e1<\/a><\/noindex>un conjunto de registros vac\u00edo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sitepoint.com\/7-simple-speed-solutions-mongodb\/\">B\u00fasqueda sin soporte de \u00edndices<\/a><\/noindex>.<\/p>\n<h3>B\u00fasqueda sin soporte de \u00edndices<\/h3>\n<p>\nLas consultas de b\u00fasqueda cumplen una funci\u00f3n similar a la operaci\u00f3n JOIN en SQL. Para un mejor rendimiento, necesitan un \u00edndice del valor de la clave que se utiliza como clave externa. Esto no es obvio, ya que el uso no se refleja en <code>explain()<\/code>. Dichos \u00edndices son un complemento al \u00edndice registrado en <code>explain()<\/code>, que a su vez es utilizado por los operadores de pipeline <code>$match<\/code> y <code>$sort<\/code>, cuando aparecen al principio del pipeline. Los \u00edndices ahora pueden abarcar cualquier etapa <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/aggregation-pipeline\/#aggregation-pipeline-operators-and-performance\">del pipeline de agregaci\u00f3n<\/a><\/noindex>. <\/p>\n<h3>La renuncia al uso de actualizaciones m\u00faltiples<\/h3>\n<p>\nEl m\u00e9todo <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/\">db.collection.update()<\/a><\/noindex><\/code> se utiliza para modificar parte de un documento existente o el documento completo, hasta la sustituci\u00f3n total seg\u00fan el par\u00e1metro que hayas definido <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#update-parameter\">update<\/a><\/noindex><\/code>. No es tan obvio que no procesar\u00e1 todos los documentos en la colecci\u00f3n hasta que establezcas el par\u00e1metro <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#multi-parameter\">multicombinaci\u00f3n<\/a><\/noindex><\/code> para actualizar todos los documentos que cumplen los criterios de la consulta.<\/p>\n<h3>No olvides la importancia del orden de las claves en la tabla hash<\/h3>\n<p>\nEn JSON, un objeto consiste en una colecci\u00f3n no ordenada de cero o m\u00e1s pares nombre\/valor, donde el nombre es una cadena y el valor puede ser una cadena, un n\u00famero, un valor booleano, cero, un objeto o un array.<\/p>\n<p>Desafortunadamente, BSON otorga gran importancia al orden al buscar. En MongoDB, el orden de las claves dentro de objetos incrustados <noindex><a rel=\"nofollow\" href=\"http:\/\/devblog.me\/wtf-mongo\">tiene el valor<\/a><\/noindex>, es decir, <code>{ firstname: \"Phil\", surname: \"factor\" }<\/code> no es lo mismo que <code>{ { surname: \"factor\", firstname: \"Phil\" }<\/code>. Es decir, debes mantener el orden de los pares nombre\/valor en los documentos si deseas asegurarte de encontrarlos.<\/p>\n<h3>No confundas <i>\"null\"<\/i> y <i>\"undefined\"<\/i><\/h3>\n<p>\nValor <i>\"undefined\"<\/i> nunca ha sido v\u00e1lido en JSON, seg\u00fan <noindex><a rel=\"nofollow\" href=\"http:\/\/www.ecma-international.org\/publications\/files\/ECMA-ST\/ECMA-404.pdf\">el est\u00e1ndar oficial<\/a><\/noindex> JSON (ECMA-404, Secci\u00f3n 5), a pesar de que se usa en JavaScript. Adem\u00e1s, para BSON, ha quedado obsoleto y se convierte en <code>$null<\/code>, lo cual no siempre es una buena soluci\u00f3n. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/meteor\/meteor\/issues\/1646#issuecomment-29682964\">Evita usar <i>\"undefined\"<\/i> en MongoDB<\/a><\/noindex>.<\/p>\n<h3>Uso <code>$limit()<\/code> sin <code>$sort()<\/code><\/h3>\n<p>\nA menudo, cuando desarrollas en MongoDB, es \u00fatil simplemente ver un ejemplo del resultado que regresar\u00e1 de una consulta o agregaci\u00f3n. Para esta tarea, necesitar\u00e1s <code>$limit()<\/code>, pero nunca deber\u00eda estar en la versi\u00f3n final del c\u00f3digo, a menos que lo uses antes de \u00e9l. <code>$sort<\/code>. Esta mec\u00e1nica es necesaria, ya que de lo contrario no puedes garantizar el orden del resultado y no podr\u00e1s revisar los datos de manera confiable. En la parte superior del resultado, recibir\u00e1s diferentes registros dependiendo de la ordenaci\u00f3n. Para un funcionamiento confiable, las consultas y agregaciones deben ser deterministas, es decir, deben producir los mismos resultados en cada ejecuci\u00f3n. El c\u00f3digo que contiene <code>$limit()<\/code>, pero no tiene <code>$sort<\/code>, no ser\u00e1 determinista y puede causar errores que ser\u00e1n dif\u00edciles de rastrear.<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>\nLa \u00fanica forma de desilusionarse con MongoDB es compararla directamente con otro tipo de bases de datos, como las bases de datos relacionales, o acercarse a su uso con ciertas expectativas espec\u00edficas. Es como comparar una naranja con un tenedor. Las bases de datos persiguen objetivos espec\u00edficos. Lo mejor es entender y apreciar estas diferencias por uno mismo. Ser\u00eda una l\u00e1stima presionar a los desarrolladores de MongoDB por el camino que se vieron obligados a seguir adoptando la metodolog\u00eda de las bases de datos relacionales. Me gustar\u00eda ver formas nuevas e interesantes de resolver problemas antiguos, como asegurar la integridad de los datos y crear sistemas de datos resistentes a fallos y ataques maliciosos.<\/p>\n<p>La introducci\u00f3n de la atomicidad de transacciones ACID en MongoDB en la versi\u00f3n 4.0 es un buen ejemplo de la implementaci\u00f3n de mejoras importantes de manera innovadora. Ahora, las transacciones de m\u00faltiples documentos y operadores son at\u00f3micas. Tambi\u00e9n se ha a\u00f1adido la capacidad de regular el tiempo necesario para obtener bloqueos y finalizar transacciones colgadas, as\u00ed como de modificar el nivel de aislamiento.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\"><img decoding=\"async\" alt=\"14 cosas que desear\u00eda haber sabido antes de comenzar a trabajar con MongoDB\" src=\"\/wp-content\/uploads\/2020\/09\/9966ff2613efab52aac99c2a0eda5c87.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h3>Leer m\u00e1s:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/519340\/\">C\u00f3mo cargar datos en Google BigQuery<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/520412\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b: \u041a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 MongoDB \u043e\u043d\u0430 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0418\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 MongoDB, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 MongoDB [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95148","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd4714 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-25T17:43:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-25T17:43:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd4714 cosas que me gustar\u00eda saber antes de comenzar a trabajar con MongoDB | ProHoster","description":"La traducci\u00f3n del art\u00edculo fue preparada anticip\u00e1ndose al inicio del curso 'Bases de datos no relacionales'.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd4714 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-25T17:43:09+00:00","article:modified_time":"2020-09-25T17:43:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95148","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:11:32","updated":"2022-10-03 07:39:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/95148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=95148"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/95148\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/95149"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=95148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=95148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=95148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}