sql >> データベース >  >> NoSQL >> MongoDB

mongoDB関連の問題を効率的に解決するにはどうすればよいですか?

    ここで、MongoDB関連の質問に対する適切で価値のある回答を得るのに役立つルールがいくつかあります。

    以下の一般的なカテゴリと手順を参照してください。データの収集に役立ち、適切な回答をすばやく見つけるのに役立ちます。

    スクリーンショットをエディタに貼り付けることはできないため、すべてのドキュメントをテキスト形式で添付してください:-)

    1. 基本-mongoDBが進化するにつれて、いくつかのクールな機能がより高いバージョンで利用可能になります-混乱を避けるために、現在のmongoバージョンを提供し、これがスタンドアロンシステム、レプリカセット、またはシャード環境であるかどうかをお知らせください

    2. パフォーマンスに関する質問:

      • 実行統計の出力を提供してください-クエリの場合:db.collection.find({query}).explain("executionStats") -これにより、集計フレームワークのクエリ、インデックスに関する統計が得られます:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
      • SSD、RAMサイズ、CPU番号、既知の場合はクロック速度などのハードウェア仕様
    3. データ操作-クエリはドキュメント構造に基づいているため、有効なドキュメントダンプ(または複数)を提供し、mockedを確認してください フィールドはクエリのフィールドを反映しています。クエリを作成しようとすると、構造が無効であるため、サンプルドキュメントを挿入できない場合があります。また、プロセスpの終了時に特定の結果を期待している場合は、期待される例を添付してください。

    4. レプリカセット/シャーディングの問題-rs.config()を追加してください / sh.status() ホストデータを削除します(機密性の高い場合)

    5. ドライバー/フレームワーク固有の質問がある場合は、何が行われ、どこに問題があるかを表示してください。クエリをmongoシェル構文からドライバー/フレームワーク構文に変換するのが非常に難しい場合があります。そのため、mongoDBシェルでそのクエリを構築し、実行例がある場合は、質問に追加してください。

    例:

    RE:1

    Windowsラップトップでmongo2.6を使用すると、2 GBを超えるコレクションを取得できないのはなぜですか?

    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

    集計パイプラインmongo3.2.3のすべてのレコードから最後の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

    レプリカセットに問題があります。rs.configダンプの下にあるmongo3.2を使用して、データが他のサーバーに複製されません。

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

    よろしくお願いします!




    1. UbuntuにインストールされているMongoDBのバージョン

    2. BookSleeveからBGSAVEを呼び出す方法は?

    3. Node.js + mongoose findは、100を超える結果が発生するとノードをフリーズします

    4. redisストアクライアントのキー/値ペアの値からキーを取得するにはどうすればよいですか?