如何有效地解决mongoDB相关的问题?

monoDB标签中存在很多关于不同问题的问题,我也看到也有一些评论请求类似的数据。

所以提供了如何提出一个好问题,但这与MongoDB无关。 有没有什么好的文件可以让我问一个好的有价值的问题?

有一些规则可以帮助我们获得有关MongoDB相关问题的好的和有价值的答案。

请参阅下面的一些常见的类别和步骤,这将有助于收集数据,这可以帮助您更快地find一个好的答案。

请以文本格式附上所有文档,截图不能粘贴到编辑器中:-)

  1. 基础知识 – 随着mongoDB的发展,一些很酷的function可以在更高的版本中使用 – 为了避免混淆,请给出当前的mongo版本,并告诉我们这是独立系统,副本集合还是分片环境

  2. 关于performance的问题:

    • 请提供执行统计输出 – 查询: db.collection.find({query}).explain("executionStats") – 这将提供一些关于查询,索引,聚合框架的统计信息: db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • 硬件规格如ssd,ram大小,cpus否,甚至时钟速度(如果知道)
  3. 数据操作 – 由于查询是基于文档结构的,请提供有效的文档转储(甚至多于一个),并确保mocked字段反映了查询中的字段,有时在尝试构build查询时,我们无法插入示例文档无效。 另外,如果你期待在过程p的某些结果 – 请附上预期的例子。

  4. 副本设置/分片问题 – 请添加rs.config() / sh.status()并删除主机数据(如果敏感)

  5. 如果你有驱动程序/框架的具体问题 – 请显示做了什么,你有什么问题。 有时,将查询从mongo shell语法翻译成驱动程序/框架语法是非常困难的,所以如果你可以尝试在mongoDB shell中build立这个查询并运行例子,请将其添加到问题中。

例子:

RE:1

在windows笔记本电脑上使用mongo 2.6我无法获得大于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

我无法从我的聚合pipe道mongo 3.2.3中获取每个logging的最后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#驱动程序中获得input结果

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

开心问!