Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

180
Visualizações
¿Cómo leer en este campo MongoDb que contiene campos secundarios dinámicos, en JavaScript?

Dada la siguiente estructura del documento MongoDB (que no puedo cambiar), no estoy seguro de cómo leer esto en JavaScript.

  • entonces loginHistory es el nombre del campo principal. Contiene un tipo de Object (¿de acuerdo?)

  • luego puede contener varios campos secundarios (este ejemplo anterior tiene solo UN elemento secundario), que son matrices. Estos nombres de campo son dinámicos, pero únicos.

  • el contenido de la 'matriz' es un C# DateTimeOffset , me han dicho.

Entonces, en el ejemplo anterior, Jane es el campo y el valor es Array , pero en realidad es DateTime.Offset .

Aquí hay otro documento que he encontrado:

  • 4x campos

Entonces no sé cómo leer esto con node/JavaScript. Ah, y el campo loginHistory podría no existir en algunos documentos, también :(

Entonces, dado el esquema/estructura del documento existente, necesito leer de alguna manera cada valor del historial de inicio de sesión y luego crear un nuevo documento (con el que haré otras cosas más adelante).

Este es un código JavaScript que probé, pero no funciona:

 users.loginHistory.forEach(loginHistory => { // do stuff, like create a new { id = users._id, name = "Jane", createdOn = "that date/time offset" } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Suponiendo que tenemos un conjunto de entrada de documentos como las capturas de pantalla, por ejemplo:

 var r = [ { loginHistory: { "Jane": [ 1648835363929, 0 ], "Bob": [ 1648835363929, 0 ] } }, { noLoginHistory: "nope" }, { loginHistory: { "Dan": [ 1648835363929, 0 ], "Dave": [ 1648835363929, 0 ], "Jane": [ 1648835363929, 0 ] } } ];

luego, la siguiente canalización creará nuevos documentos "convertidos" en una colección llamada foo2 .

 db.foo.aggregate([ // OK if loginHistory does not exist. X will be set to null // and the $unwind will not produce anything: {$project: {X: {$objectToArray: "$$ROOT.loginHistory"} }}, {$unwind: "$X"}, // Now we have individual docs of // X: {k: name, v: the array} // The OP wanted to make a new doc for each one. I don't know // what function to apply to turn Xv[0] into a MongoDB datetime // because I don't know what that big int (637807576034080256) is // supposed to be so I used regular ms since epoch for the example // instead. The OP will have to get more creative with division // and such to turn 637807576034080256 into something "toDate-able" // in MongoDB. You *could* store the big int as is but it is always // good to try to turn a datetime into a real datetime in mongodb. {$project: { _id: false, name: '$X.k', createdOn: {$toDate: {$arrayElemAt:['$X.v',0]}} }} // Now we have docs like : // {name: "Jane", createdOn: ISODate(...) } // By calling $out to a new collection, a new _id will be assigned // to each: ,{$out: "foo2"} ]);
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda