sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan løser man mongoDB-relateret problem effektivt?

Der er et par regler, der vil hjælpe her med at få et godt og værdifuldt svar på MongoDB-relaterede spørgsmål.

Se venligst nedenfor nogle almindelige kategorier og trin, der vil hjælpe med at indsamle data, som kan hjælpe dig med at finde et godt svar hurtigere.

Vedhæft alle dokumenter i tekstformat, da skærmbilledet ikke kan indsættes i editoren :-)

  1. Grundlæggende - efterhånden som mongoDB udvikler sig, er nogle fede funktioner tilgængelige i en højere version - for at undgå forvirring, giv venligst din nuværende mongo-version og lad os vide, om dette er et selvstændigt system, et replikasæt eller et sharded miljø

  2. Spørgsmål om ydeevne:

    • giv venligst udførelsesstatistik output - for forespørgsler:db.collection.find({query}).explain("executionStats") - som vil give nogle statistikker om forespørgsel, indekser, for aggregeringsramme:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • hardwarespecifikationer som ssd, ram-størrelse, cpus-nr og endda clock-hastighed, hvis kendt
  3. Datamanipulation - da forespørgsler er baseret på dokumentstruktur, angiv venligst et gyldigt dokumentdump (eller endda mere end én) og sørg for, at mocked felter afspejler felter i forespørgslen, nogle gange når vi forsøger at bygge forespørgsel, er vi ikke i stand til at indsætte eksempler på dokumenter, da strukturen ikke er gyldig. Også hvis du forventer et bestemt resultat ved neden af ​​proces p - vedhæft venligst forventet eksempel.

  4. Replika sæt/sharding problemer - tilføj venligst rs.config() / sh.status() og fjern værtsdata (hvis følsomme)

  5. Hvis du har et driver-/rammespecifikt spørgsmål - vis venligst, hvad der blev gjort, og hvor er du har problemet. Nogle gange er det meget svært at oversætte forespørgsel fra mongo shell-syntaks til driver/framework-syntaks - så hvis du kunne prøve at bygge den forespørgsel i mongoDB shell - og have et kørende eksempel - så føj det til spørgsmålet.

Eksempler:

RE:1

Ved at bruge mongo 2.6 på Windows laptop kan jeg ikke have en samling større end 2 GB, hvorfor?

RE:2

Min forespørgsel db.collection.find({isValid:true}) tager mere end 30 sekunder, se venligst forklar output:

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

Jeg har problemer med at hente de sidste 3 array-elementer fra hver post i min aggregeringspipeline, mongo 3.2.3

min forespørgsel:db.collection.aggregate([{aggregation pipeline}])

dokumentskema:

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

Jeg har problemer med mit replikasæt, data replikeres ikke til anden server ved hjælp af mongo 3.2, under rs.config dump:

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

RE:5

Jeg har aggregeringsforespørgsel i mongo og har problemer med at få skrevet resultat fra c# chauffør

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

min c#-kode

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


    }
}

Glad med at spørge!




  1. Migrering af MongoDB til DynamoDB, del 1

  2. Dårlig opslagssammenlægningsydelse

  3. Træk en post fra et array via Meteor

  4. Hent data fra samling b ikke i samling a i en MongoDB shell-forespørgsel