MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment résoudre efficacement les problèmes liés à mongoDB ?

Il y a quelques règles qui aideront ici à obtenir une bonne et précieuse réponse à la question liée à MongoDB.

Veuillez voir ci-dessous quelques catégories et étapes courantes qui vous aideront à collecter des données qui pourraient vous aider à trouver une bonne réponse plus rapidement.

Veuillez joindre tous les documents au format texte car la capture d'écran ne peut pas être collée dans l'éditeur :-)

  1. Bases - à mesure que mongoDB évolue, certaines fonctions intéressantes sont disponibles dans une version supérieure - pour éviter toute confusion, veuillez indiquer votre version actuelle de mongo et nous indiquer s'il s'agit d'un système autonome, d'un jeu de répliques ou d'un environnement partagé

  2. Questions sur les performances :

    • veuillez fournir une sortie de statistiques d'exécution - pour les requêtes :db.collection.find({query}).explain("executionStats") - qui donnera des statistiques sur la requête, les index, pour le framework d'agrégation :db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • spécifications matérielles telles que le ssd, la taille de la mémoire vive, le nombre de processeurs et même la vitesse d'horloge si elle est connue
  3. Manipulation de données - comme les requêtes sont basées sur la structure du document, veuillez fournir un vidage de document valide (ou même plus d'un) et assurez-vous que mocked les champs reflètent les champs dans la requête, parfois lorsque nous essayons de créer une requête, nous ne sommes pas en mesure d'insérer des exemples de documents car leur structure n'est pas valide. De plus, si vous attendez un certain résultat à la fin du processus p - veuillez joindre un exemple attendu.

  4. Problèmes de jeu de répliques/sharding - veuillez ajouter rs.config() / sh.status() et supprimer les données de l'hôte (si sensibles)

  5. Si vous avez une question spécifique au pilote/framework, veuillez afficher ce qui a été fait et où se situe votre problème. Parfois, il est très difficile de traduire la requête de la syntaxe du shell mongo à la syntaxe du pilote/framework - donc si vous pouviez essayer de construire cette requête dans le shell mongoDB - et avoir un exemple en cours d'exécution - veuillez l'ajouter à la question.

Exemples :

RE :1

En utilisant mongo 2.6 sur un ordinateur portable Windows, je ne parviens pas à avoir une collection supérieure à 2 Go, pourquoi ?

RE:2

Ma requête db.collection.find({isValid:true}) prend plus de 30 secondes, veuillez consulter la sortie d'explication :

{
    "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

J'ai du mal à obtenir les 3 derniers éléments de tableau de chaque enregistrement de mon pipeline d'agrégation, mongo 3.2.3

ma requête :db.collection.aggregate([{aggregation pipeline}])

schéma du document :

{
    "_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

J'ai des problèmes avec mon jeu de répliques, les données ne sont pas répliquées sur un autre serveur à l'aide de mongo 3.2, ci-dessous le vidage rs.config :

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

RE:5

J'ai une requête d'agrégation dans mongo et j'ai du mal à obtenir un résultat typé à partir de c# chauffeur

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]
                }
            }
        }
    ])

mon code 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();


    }
}

Bonne demande !