MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como resolver problemas relacionados ao mongoDB de forma eficiente?


Existem algumas regras que ajudarão aqui a obter respostas boas e valiosas para perguntas relacionadas ao MongoDB.

Veja abaixo algumas categorias e etapas comuns que ajudarão na coleta de dados que podem ajudá-lo a encontrar uma boa resposta mais rapidamente.

Anexe todos os documentos em formato de texto, pois a captura de tela não pode ser colada no editor :-)


  1. Básico - à medida que o mongoDB evolui, algumas funções interessantes estão disponíveis na versão superior - para evitar confusão, forneça sua versão atual do mongo e informe-nos se este é um sistema autônomo, conjunto de réplicas ou ambiente fragmentado

  2. Dúvidas sobre o desempenho:
    • forneça a saída das estatísticas de execução - para consultas:db.collection.find({query}).explain("executionStats") - que fornecerá algumas estatísticas sobre consulta, índices, para estrutura de agregação:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • especificações de hardware como ssd, tamanho de ram, sem cpus e até mesmo velocidade de clock, se conhecido

  3. Manipulação de dados - como as consultas são baseadas na estrutura do documento, forneça um despejo de documento válido (ou até mais de um) e certifique-se de que mocked campos estão refletindo campos na consulta, às vezes ao tentar construir a consulta, não conseguimos inserir documentos de exemplo, pois a estrutura não é válida. Além disso, se você está esperando determinado resultado no ned do processo p - por favor, anexe o exemplo esperado.

  4. Problemas de conjunto/fragmentação de réplicas - adicione rs.config() / sh.status() e remova os dados do host (se sensíveis)

  5. Se você tiver uma pergunta específica do driver/framework - por favor, exiba o que foi feito e onde está o problema. Às vezes, é muito difícil traduzir a consulta da sintaxe do shell do mongo para a sintaxe do driver/framework - então, se você puder tentar construir essa consulta no shell do mongoDB - e ter um exemplo em execução - adicione-o à pergunta.

Exemplos:


RE:1

Usando o mongo 2.6 no laptop Windows, não consigo ter uma coleção maior que 2 GB, por quê?

RE:2

Minha consulta db.collection.find({isValid:true}) leva mais de 30 segundos, consulte a saída de explicação:
{
    "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

Estou tendo problemas para obter os últimos 3 elementos de matriz de todos os registros no meu pipeline de agregação, mongo 3.2.3

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

esquema do 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

Eu tenho problemas com meu conjunto de réplicas, os dados não são replicados para outro servidor usando o mongo 3.2, abaixo do dump rs.config:
   {
       "_id" : "rs0",
       "version" : 1,
       "members" : [
          {
             "_id" : 1,
             "host" : "mongodb0.example.net:27017"
          }
       ]
    }

RE:5

Eu tenho consulta de agregação no mongo e estou tendo problemas para obter o resultado digitado de c# motorista
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]
                }
            }
        }
    ])

meu 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();


    }
}

Boa pergunta!