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 :-)
-
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
-
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
- proszę podać dane wyjściowe statystyk wykonania - dla zapytań:
-
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. -
Problemy z zestawem/shardingiem replik - dodaj
rs.config()
/sh.status()
i usuń dane hosta (jeśli są wrażliwe) -
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();
}
}