MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak skutecznie rozwiązać problem związany z mongoDB?

Istnieje kilka zasad, które pomogą w uzyskaniu dobrej i wartościowej odpowiedzi na pytanie związane z MongoDB.

Zapoznaj się z poniższymi typowymi kategoriami i krokami, które pomogą w gromadzeniu danych, które mogą pomóc w szybszym znalezieniu dobrej odpowiedzi.

Załącz wszystkie dokumenty w formacie tekstowym, ponieważ zrzutu ekranu nie można wkleić do edytora :-)

  1. Podstawy - w miarę rozwoju mongoDB kilka fajnych funkcji jest dostępnych w wyższej wersji - aby uniknąć nieporozumień, podaj swoją aktualną wersję mongo i daj nam znać, czy jest to samodzielny system, zestaw replik czy środowisko shardowane

  2. Pytania dotyczące wydajności:

    • proszę podać dane wyjściowe statystyk wykonania - dla zapytań:db.collection.find({query}).explain("executionStats") - to da trochę statystyk dotyczących zapytań, indeksów, dla frameworka agregacji:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • specyfikacje sprzętowe, takie jak ssd, rozmiar pamięci RAM, brak procesora, a nawet szybkość zegara, jeśli jest znana
  3. Manipulacja danymi - ponieważ zapytania są oparte na strukturze dokumentu, proszę podać poprawny zrzut dokumentu (lub nawet więcej niż jeden) i upewnić się, że mocked pola odzwierciedlają pola w zapytaniu, czasami podczas próby zbudowania zapytania nie możemy wstawić przykładowych dokumentów, ponieważ ich struktura jest nieprawidłowa. Również jeśli oczekujesz określonego wyniku na koniec procesu p - dołącz oczekiwany przykład.

  4. Problemy z zestawem/shardingiem replik - dodaj rs.config() / sh.status() i usuń dane hosta (jeśli są wrażliwe)

  5. Jeśli masz pytanie dotyczące konkretnego sterownika/struktury - pokaż, co zostało zrobione i gdzie masz problem. Czasami bardzo trudno jest przetłumaczyć zapytanie ze składni powłoki mongo na składnię sterownika/frameworka - więc jeśli mógłbyś spróbować zbudować to zapytanie w powłoce mongoDB - i mając uruchomiony przykład - dodaj to do pytania.

Przykłady:

RE:1

Używając mongo 2.6 na laptopie z systemem Windows, nie mogę mieć kolekcji większej niż 2 GB, dlaczego?

RE:2

Moje zapytanie db.collection.find({isValid:true}) trwa dłużej niż 30 sekund, zobacz wyjaśnienie wyjścia:

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

Mam problem z pobraniem ostatnich 3 elementów tablicy z każdego rekordu w moim potoku agregacji, mongo 3.2.3

moje zapytanie:db.collection.aggregate([{aggregation pipeline}])

schemat 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

Mam problemy z zestawem replik, dane nie są replikowane na inny serwer za pomocą mongo 3.2, poniżej zrzutu rs.config:

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

RE:5

Mam zapytanie agregujące w mongo i mam problem z uzyskaniem wpisanego wyniku z c# kierowca

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


    }
}

Miłego zadawania pytań!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Automatyzacja sprawdzania konfiguracji bazy danych

  2. MongoDB sortuje dokumenty według elementów tablicy

  3. Policz pola w kolekcji MongoDB

  4. Zamawianie zestawu wyników losowo w mongo

  5. Określ wiele kryteriów dla elementów tablicy