Има няколко правила, които ще ви помогнат да получите добър и ценен отговор на въпрос, свързан с MongoDB.
Моля, вижте по-долу някои общи категории и стъпки, които ще ви помогнат при събирането на данни, които биха могли да ви помогнат да намерите добър отговор по-бързо.
Моля, прикачете всички документи в текстов формат, тъй като екранната снимка не може да бъде поставена в редактора :-)
-
Основи - с развитието на mongoDB някои страхотни функции са налични в по-висока версия - за да избегнете объркване, моля, дайте текущата си версия на mongo и ни уведомете дали това е самостоятелна система, набор от реплики или разчленена среда
-
Въпроси относно производителността:
- моля, предоставете изходна статистика за изпълнение - за заявки:
db.collection.find({query}).explain("executionStats")
- това ще даде някои статистически данни за заявката, индексите, за рамката за агрегиране:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
- хардуерни спецификации като ssd, размер на RAM, номер на процесора и дори тактова честота, ако са известни
- моля, предоставете изходна статистика за изпълнение - за заявки:
-
Манипулиране на данни - тъй като заявките се основават на структурата на документа, моля, предоставете валиден дъмп на документ (или дори повече от един) и се уверете, че
mocked
полетата отразяват полета в заявката, понякога, когато се опитваме да изградим заявка, не можем да вмъкнем примерни документи, тъй като структурата им не е валидна. Също така, ако очаквате определен резултат в началото на процес p - моля, прикачете очаквания пример. -
Проблеми с набор от реплики/разделяне – моля, добавете
rs.config()
/sh.status()
и премахнете данните на хоста (ако са чувствителни) -
Ако имате специфичен въпрос за драйвера/рамката - моля, покажете какво е направено и къде имате проблем. Понякога е много трудно да се преведе заявката от синтаксис на mongo shell към синтаксис на драйвер/рамка - така че ако можете да опитате да изградите тази заявка в mongoDB shell - и като имате пример за изпълнение - моля, добавете я към въпроса.
Примери:
RE:1
Използвайки mongo 2.6 на лаптоп с Windows, не мога да имам колекция, по-голяма от 2GB, защо?
RE:2
Моята заявка db.collection.find({isValid:true})
отнема повече от 30 секунди, моля, вижте изхода за обяснение:
{
"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
Имам проблеми да получа последните 3 елемента на масива от всеки запис в моя конвейер за агрегиране, mongo 3.2.3
моята заявка:db.collection.aggregate([{aggregation pipeline}])
схема на документа:
{
"_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
Имам проблеми с моя набор от реплики, данните не се репликират на друг сървър, използвайки mongo 3.2, под дъмпа на rs.config:
{
"_id" : "rs0",
"version" : 1,
"members" : [
{
"_id" : 1,
"host" : "mongodb0.example.net:27017"
}
]
}
RE:5
Имам заявка за агрегиране в mongo и имам проблеми да получа въведен резултат от c#
шофьор
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]
}
}
}
])
моят 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();
}
}