sql >> Database >  >> NoSQL >> MongoDB

Hoe mongoDB-gerelateerd probleem efficiënt op te lossen?

Er zijn een paar regels die hier zullen helpen om een ​​goed en waardevol antwoord te krijgen op MongoDB-gerelateerde vragen.

Zie hieronder enkele veelvoorkomende categorieën en stappen die u kunnen helpen bij het verzamelen van gegevens die u kunnen helpen om sneller een goed antwoord te vinden.

Voeg alle documenten toe in tekstformaat, aangezien screenshot niet in de editor kan worden geplakt :-)

  1. Basis - naarmate mongoDB evolueert, zijn sommige coole functies beschikbaar in een hogere versie - om verwarring te voorkomen, geef je huidige mongo-versie op en laat ons weten of dit een zelfstandig systeem, replicaset of shard-omgeving is

  2. Vragen over prestaties:

    • geef uitvoerstatistieken op - voor vragen:db.collection.find({query}).explain("executionStats") - dat geeft enkele statistieken over query's, indexen, voor aggregatieframework:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • hardwarespecificaties zoals ssd, ram-grootte, CPU-nr en zelfs kloksnelheid indien bekend
  3. Gegevensmanipulatie - aangezien zoekopdrachten zijn gebaseerd op de documentstructuur, geef een geldige documentdump op (of zelfs meer dan één) en zorg ervoor dat mocked velden weerspiegelen velden in de query, soms kunnen we geen voorbeelddocumenten invoegen als we proberen een query te maken, omdat de structuur niet geldig is. Ook als u een bepaald resultaat verwacht aan het einde van proces p - voeg het verwachte voorbeeld toe.

  4. Problemen met replicaset/sharding - voeg rs.config() toe / sh.status() en hostgegevens verwijderen (indien gevoelig)

  5. Als u een specifieke vraag heeft over een driver/framework, laat dan zien wat er is gedaan en waar u een probleem heeft. Soms is het erg moeilijk om een ​​query te vertalen van de mongo-shell-syntaxis naar de driver/framework-syntaxis - dus als u zou kunnen proberen die query in de mongoDB-shell te bouwen - en een voorbeeld te hebben - voeg het dan toe aan de vraag.

Voorbeelden:

RE:1

Ik gebruik mongo 2.6 op een Windows-laptop. Ik kan geen verzameling groter dan 2 GB hebben, waarom?

RE:2

Mijn vraag db.collection.find({isValid:true}) duurt meer dan 30 seconden, zie uitvoer uitleggen:

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

Ik heb problemen om de laatste 3 array-elementen te krijgen van elk record in mijn aggregatiepijplijn, mongo 3.2.3

mijn vraag:db.collection.aggregate([{aggregation pipeline}])

documentschema:

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

Ik heb problemen met mijn replicaset, gegevens worden niet gerepliceerd naar een andere server met behulp van mongo 3.2, hieronder rs.config dump:

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

RE:5

Ik heb een aggregatiequery in Mongo en heb problemen om het getypte resultaat van c# te krijgen 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]
                }
            }
        }
    ])

mijn c#-code

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


    }
}

Veel plezier met vragen!




  1. Databases en collecties beheren in MongoDB

  2. Mongoose:krijg de volledige lijst met gebruikers

  3. MongoDB $gte Aggregation Pipeline Operator

  4. Mongoose verloopt eigendom werkt niet goed