sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo resolver el problema relacionado con mongoDB de manera eficiente?

Hay algunas reglas que ayudarán aquí a obtener una respuesta buena y valiosa para la pregunta relacionada con MongoDB.

Consulte a continuación algunas categorías y pasos comunes que lo ayudarán a recopilar datos que podrían ayudarlo a encontrar una buena respuesta más rápido.

Adjunte todos los documentos en formato de texto, ya que la captura de pantalla no se puede pegar en el editor :-)

  1. Conceptos básicos:a medida que mongoDB evoluciona, algunas funciones geniales están disponibles en una versión superior; para evitar confusiones, proporcione su versión actual de mongo y háganos saber si se trata de un sistema independiente, un conjunto de réplicas o un entorno fragmentado

  2. Preguntas sobre el rendimiento:

    • proporcione resultados de estadísticas de ejecución; para consultas:db.collection.find({query}).explain("executionStats") - eso dará algunas estadísticas sobre consultas, índices, para el marco de agregación:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • especificaciones de hardware como ssd, tamaño de ram, número de cpus e incluso velocidad de reloj si se conocen
  3. Manipulación de datos:dado que las consultas se basan en la estructura del documento, proporcione un volcado de documento válido (o incluso más de uno) y asegúrese de que mocked los campos reflejan campos en la consulta, a veces, cuando intentamos crear una consulta, no podemos insertar documentos de ejemplo porque su estructura no es válida. Además, si espera cierto resultado en el ned del proceso p, adjunte el ejemplo esperado.

  4. Problemas de fragmentación/conjunto de réplicas:agregue rs.config() / sh.status() y eliminar los datos del host (si son confidenciales)

  5. Si tiene una pregunta específica sobre el controlador/marco, muestre lo que se hizo y dónde tiene el problema. A veces es muy difícil traducir la consulta de la sintaxis del shell mongo a la sintaxis del controlador/marco, por lo que si pudiera intentar crear esa consulta en el shell mongoDB y tener un ejemplo en ejecución, agréguelo a la pregunta.

Ejemplos:

RE:1

Al usar mongo 2.6 en una computadora portátil con Windows, no puedo tener una colección de más de 2 GB, ¿por qué?

RE:2

Mi consulta db.collection.find({isValid:true}) tarda más de 30 segundos, consulte el resultado explicado:

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "test.collectionName",
        "indexFilterSet" : false,
        "parsedQuery" : {},
        "winningPlan" : {
            "stage" : "COLLSCAN",
            "direction" : "forward"
        },
        "rejectedPlans" : []
    },
    "executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 6,
        "executionTimeMillis" : 0,
        "totalKeysExamined" : 0,
        "totalDocsExamined" : 6,
        "executionStages" : {
            "stage" : "COLLSCAN",
            "nReturned" : 6,
            "executionTimeMillisEstimate" : 0,
            "works" : 8,
            "advanced" : 6,
            "needTime" : 1,
            "needYield" : 0,
            "saveState" : 0,
            "restoreState" : 0,
            "isEOF" : 1,
            "invalidates" : 0,
            "direction" : "forward",
            "docsExamined" : 6
        }
    },
    "serverInfo" : {
        "host" : "greg",
        "port" : 27017,
        "version" : "3.3.6-229-ge533634",
        "gitVersion" : "e533634d86aae9385d9bdd94e15d992c4c8de622"
    },
    "ok" : 1.0
}

RE:3

Tengo problemas para obtener los últimos 3 elementos de matriz de cada registro en mi tubería de agregación, mongo 3.2.3

mi consulta:db.collection.aggregate([{aggregation pipeline}])

esquema del documento:

{
    "_id" : "john",
    "items" : [{
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e4"),
                    "grad" : true
                }
            ]
        }, {
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e5"),
                    "grad" : true
                }
            ]
        }, {
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e6"),
                    "grad" : true
                }
            ]
        }, {
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e7"),
                    "grad" : true
                }
            ]
        }, {
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e8"),
                    "grad" : true
                }
            ]
        }
    ]
}

//expected result

{
    "_id" : "john",
    "items" : [{
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e4"),
                    "grad" : true
                }
            ]
        }, {
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e5"),
                    "grad" : true
                }
            ]
        }, {
            "name" : "John",
            "items" : [{
                    "school" : ObjectId("56de35ab520fc05b2fa3d5e6"),
                    "grad" : true
                }
            ]
        }
    ]
}

RE:4

Tengo problemas con mi conjunto de réplicas, los datos no se replican en otro servidor usando mongo 3.2, debajo del volcado de rs.config:

   {
       "_id" : "rs0",
       "version" : 1,
       "members" : [
          {
             "_id" : 1,
             "host" : "mongodb0.example.net:27017"
          }
       ]
    }

RE:5

Tengo una consulta de agregación en mongo y tengo problemas para obtener el resultado escrito de c# conductor

startDate = new Date() // Current date
startDate.setDate(startDate.getDate() - 7) // Subtract 7 days

db.collection.aggregate([{
            $match : {
                LastUpdate : {
                    $gte : startDate
                }
            }
        }, {
            $sort : {
                LastUpdate : -1
            }
        }, //sort data
        {
            $group : {
                _id : "$Emp_ID",
                documents : {
                    $push : "$$ROOT"
                }
            }
        }, {
            $project : {
                _id : 1,
                documents : {
                    $slice : ["$documents", 3]
                }
            }
        }
    ])

mi código C#

public static void Main()
{
    var client = new MongoClient("mongodb://localhost:27017");
    var database = client.GetDatabase("test");

    var collection = database.GetCollection<InnerDocument>("irpunch");


    var aggregationDocument = collection.Aggregate()
        .Match(x=>x.LastUpdate> DateTime.Now.AddDays(-40))
        .SortByDescending(x => x.LastUpdate)
        .Group(BsonDocument.Parse("{ _id:'$Emp_ID', documents:{ '$push':'$$ROOT'}}"))
        // how to get projection result as typed object ??
        .Project(BsonDocument.Parse("{ _id:1, documents:{ $slice:['$documents', 3]}}")).ToList();


    }
}

¡Feliz pregunta!