sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur löser man mongoDB-relaterade problem effektivt?

Det finns några regler som hjälper här för att få bra och värdefulla svar på MongoDB-relaterade frågor.

Se nedan några vanliga kategorier och steg som hjälper dig att samla in data som kan hjälpa dig att hitta ett bra svar snabbare.

Vänligen bifoga alla dokument i textformat eftersom skärmdumpen inte kan klistras in i editorn :-)

  1. Grunderna - när mongoDB utvecklas finns några coola funktioner tillgängliga i högre version - för att undvika förvirring, vänligen ange din nuvarande mongo-version och låt oss veta om detta är ett fristående system, replikuppsättning eller fragmenterad miljö

  2. Frågor om prestanda:

    • vänligen tillhandahåll exekveringsstatistik - för frågor:db.collection.find({query}).explain("executionStats") - som ger lite statistik om fråga, index, för aggregeringsramverket:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • hårdvaruspecifikationer som ssd, ramstorlek, cpus nr och även klockhastighet om känd
  3. Datamanipulation - eftersom frågor är baserade på dokumentstruktur, vänligen tillhandahåll giltig dokumentdump (eller till och med mer än en) och se till att mocked fält återspeglar fält i frågan, ibland när vi försöker skapa en fråga kan vi inte infoga exempeldokument eftersom strukturen inte är giltig. Även om du förväntar dig ett visst resultat vid nedgången av process p - bifoga förväntat exempel.

  4. Replica set/sharding problem - lägg till rs.config() / sh.status() och ta bort värddata (om känslig)

  5. Om du har en drivrutins-/ramspecifik fråga - vänligen visa vad som gjordes och var är du har problem. Ibland är det väldigt svårt att översätta fråga från mongo-skalsyntax till drivrutins-/ramsyntax - så om du kan försöka bygga den frågan i mongoDB-skal - och ha ett körande exempel - lägg till den i frågan.

Exempel:

RE:1

När jag använder mongo 2.6 på en bärbar dator med Windows kan jag inte ha en samling större än 2 GB, varför?

RE:2

Min fråga db.collection.find({isValid:true}) tar mer än 30 sekunder, se förklara utdata:

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

Jag har problem med att hämta de tre sista arrayelementen från varje post i min aggregeringspipeline, mongo 3.2.3

min fråga:db.collection.aggregate([{aggregation pipeline}])

dokumentschema:

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

Jag har problem med min replikuppsättning, data replikeras inte till annan server med mongo 3.2, nedan rs.config dump:

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

RE:5

Jag har en aggregeringsfråga i mongo och har problem med att få maskinskrivna resultat från c# förare

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#-kod

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


    }
}

Lycklig fråga!




  1. MongoDB Aggregation:Hur får man det totala antalet poster?

  2. Visualisera din klustertopologi i ClusterControl

  3. Mongodb:Det gick inte att ansluta till 127.0.0.1:27017, anledning:errno:10061

  4. Mongo Fråga $gt,$lt