• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

269
Vistas
Incrustar campo raíz en un subdocumento dentro de una canalización de agregación

Tal vez alguien pueda ayudarme con la canalización de agregación de Mongo. Estoy tratando de poner un objeto en otro objeto, pero soy nuevo en Mongo y es muy difícil:

 { "_id" : ObjectId("5888a74f137ed66828367585"), "name" : "Unis", "tags" : [...], "editable" : true, "token" : "YfFzaoNvWPbvyUmSulXfMPq4a9QgGxN1ElIzAUmSJRX4cN7zCl", "columns" : [...], "description" : "...", "sites" : { "_id" : ObjectId("5888ae2f137ed668fb95a03d"), "url" : "www.....de", "column_values" : [ "University XXX", "XXX", "false" ], "list_id" : ObjectId("5888a74f137ed66828367585") }, "scan" : [ { "_id" : ObjectId("5888b1074e2123c22ae7f4d3"), "site_id" : ObjectId("5888ae2f137ed668fb95a03d"), "scan_group_id" : ObjectId("5888a970a7f75fbd49052ed6"), "date" : ISODate("2017-01-18T16:00:00Z"), "score" : "B", "https" : false, "cookies" : 12 } ] }

Quiero poner cada objeto en la matriz de "escaneo" en "sitios". Para que quede así:

 { "_id" : ObjectId("5888a74f137ed66828367585"), "name" : "Unis", "tags" : [...], "editable" : true, "token" : "YfFzaoNvWPbvyUmSulXfMPq4a9QgGxN1ElIzAUmSJRX4cN7zCl", "columns" : [...], "description" : "...", "sites" : { "_id" : ObjectId("5888ae2f137ed668fb95a03d"), "url" : "www.....de", "column_values" : [ "University XXX", "XXX", "false" ], "list_id" : ObjectId("5888a74f137ed66828367585"), "scan" : [ { "_id" : ObjectId("5888b1074e2123c22ae7f4d3"), "site_id" : ObjectId("5888ae2f137ed668fb95a03d"), "scan_group_id" : ObjectId("5888a970a7f75fbd49052ed6"), "date" : ISODate("2017-01-18T16:00:00Z"), "score" : "B", "https" : false, "cookies" : 12 } ] } }

¿Hay algún paso en la tubería de agregación para realizar esta tarea?

about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Con una sola tubería, no veo otra forma que especificar cada campo individualmente como:

 db.collection.aggregate([ { "$project": { "name": 1, "tags": 1, "editable": 1, "token": 1, "columns": 1, "description": 1, "sites._id": "$sites._id", "sites.url": "$sites.url" , "sites.column_values": "$sites.column_values" , "sites.list_id": "$sites.list_id", "sites.scan": "$scan" } } ])

Con MongoDB 3.4 y versiones posteriores, puede usar el paso de canalización $addFields en lugar de especificar todos los campos usando $project . La ventaja es que agrega nuevos campos a los documentos y genera documentos que contienen todos los campos existentes de los documentos de entrada y los campos recién agregados:

 db.collection.aggregate([ { "$addFields": { "sites._id": "$sites._id", "sites.url": "$sites.url" , "sites.column_values": "$sites.column_values" , "sites.list_id": "$sites.list_id", "sites.scan": "$scan" } }, { "$project": { "scan": 0 } } ])
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda