sql >> Databáze >  >> NoSQL >> MongoDB

Jak efektivně vyřešit problém související s mongoDB?

Existuje několik pravidel, která vám pomohou získat dobrou a hodnotnou odpověď na otázku související s MongoDB.

Níže naleznete některé běžné kategorie a kroky, které vám pomohou se shromažďováním údajů, které vám mohou pomoci rychleji najít dobrou odpověď.

Přiložte prosím všechny dokumenty v textovém formátu, protože snímek obrazovky nelze vložit do editoru :-)

  1. Základy – jak se mongoDB vyvíjí, některé skvělé funkce jsou k dispozici ve vyšší verzi – abyste předešli nejasnostem, uveďte svou aktuální verzi mongo a dejte nám vědět, zda se jedná o samostatný systém, sadu replik nebo sdílené prostředí

  2. Otázky týkající se výkonu:

    • poskytněte prosím výstup statistik provádění – pro dotazy:db.collection.find({query}).explain("executionStats") - to poskytne nějaké statistiky o dotazu, indexech, pro agregační rámec:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • hardwarové specifikace jako ssd, velikost ram, cpus no a dokonce i rychlost hodin, pokud jsou známy
  3. Manipulace s daty – protože dotazy jsou založeny na struktuře dokumentu, uveďte platný výpis dokumentu (nebo dokonce více než jeden) a zajistěte, aby byl mocked pole odrážejí pole v dotazu, někdy při pokusu o sestavení dotazu nejsme schopni vložit vzorové dokumenty, protože jejich struktura není platná. Také pokud očekáváte určitý výsledek na konci procesu p - připojte očekávaný příklad.

  4. Problémy se sadou replik/sharding – přidejte prosím rs.config() / sh.status() a odstranit data hostitele (pokud jsou citlivá)

  5. Máte-li otázku týkající se ovladače/rámce - zobrazte prosím, co bylo provedeno a kde máte problém. Někdy je velmi těžké přeložit dotaz ze syntaxe mongo shellu do syntaxe ovladače/rámce - takže pokud byste mohli zkusit vytvořit tento dotaz v mongoDB shellu - a mít spuštěný příklad - přidejte jej prosím k otázce.

Příklady:

RE:1

Při použití mongo 2.6 na notebooku se systémem Windows nemohu mít sbírku větší než 2 GB, proč?

RE:2

Můj dotaz db.collection.find({isValid:true}) trvá déle než 30 sekund, viz vysvětlující výstup:

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

Mám problém získat poslední 3 prvky pole z každého záznamu v mém agregačním kanálu, mongo 3.2.3

můj dotaz:db.collection.aggregate([{aggregation pipeline}])

schéma dokumentu:

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

Mám problémy se sadou replik, data se nereplikují na jiný server pomocí mongo 3.2, níže výpis rs.config:

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

RE:5

Mám agregační dotaz v mongo a mám problém získat zadaný výsledek z c# řidič

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

můj kód 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();


    }
}

S radostí se ptám!




  1. Jak mohu použít mongodb s elektronem?

  2. Jak se dostat do výroby s MongoDB - deset tipů

  3. MongoDB - stránkování

  4. Vytvoření vztahu cizího klíče v Mongoose