es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consultar un conjunto de documentos en una matriz (complicado)

Principiante aquí. Dame una consulta find() que me dará la edad de “Sam”.

Necesito consultar la matriz de contratistas de documentos. El campo “nombre” es un documento que tiene fname: “Sam”. Pero el campo “edad” no está en este documento “nombre”, está en el documento de nivel anterior.

Necesito una consulta amplia que funcione incluso si la posición de “Sam” es cualquier posición aleatoria en una gran base de datos.

Salida esperada:

{edad: 22}


{
"nombre": "Manzanas",
"cantidad": 120,
"de": [
"EE. UU.",
"Brasil",
"Rusia"
],
"contratistas": [
{
"nombre": {
"fname": "Sam",
"lname": "McGregor"
},
"edad": 22
},
{
"nombre": {
"fname": "zxc",
"lname": "asd"
},
"edad": 32
}
]
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para encontrar la edad de “Sam” en el array de documentos contractors, podemos utilizar la siguiente consulta find():

    db.collection.find({"contractors.name.fname": "Sam"}, {"contractors.age": 1, "_id": 0})
    

    Esta consulta busca todos los documentos en la colección donde el campo fname del documento name en el array contractors sea igual a “Sam”. El segundo parámetro de la función find() especifica los campos que queremos incluir o excluir en la salida. En este caso, queremos incluir el campo age del subdocumento contractors y excluir el campo _id.

    La salida de la consulta debería ser:

    { "contractors" : [ { "age" : 22 } ] }
    

    Esta salida muestra que la edad de “Sam” es 22. Ten en cuenta que la salida incluye el subdocumento completo contractors, no solo el campo age. Si solo quieres ver el campo age, puedes modificar la consulta a:

    db.collection.find({"contractors.name.fname": "Sam"}, {"contractors.age": 1, "_id": 0, "contractors.name": 0})
    

    Esto excluye el subdocumento name de la salida.

Comments are closed.