MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come risolvere in modo efficiente il problema relativo a mongoDB?

Ci sono alcune regole che aiuteranno qui a ottenere una risposta valida e preziosa per la domanda relativa a MongoDB.

Consulta di seguito alcune categorie e passaggi comuni che ti aiuteranno a raccogliere dati che potrebbero aiutarti a trovare una buona risposta più velocemente.

Si prega di allegare tutti i documenti in formato testo poiché lo screenshot non può essere incollato nell'editor :-)

  1. Nozioni di base - man mano che mongoDB si evolve, alcune funzioni interessanti sono disponibili in una versione successiva - per evitare confusione, fornisci la tua versione mongo corrente e facci sapere se si tratta di un sistema autonomo, di un set di repliche o di un ambiente partizionato

  2. Domande sulle prestazioni:

    • fornisci l'output delle statistiche di esecuzione - per le query:db.collection.find({query}).explain("executionStats") - che fornirà alcune statistiche su query, indici, per framework di aggregazione:db.collection.aggregate([{pieplineDatausedToExecuteAggregation},{explain:true}])
    • specifiche hardware come ssd, dimensione ram, cpus no e persino velocità di clock se nota
  3. Manipolazione dei dati - poiché le query si basano sulla struttura del documento, fornisci un dump del documento valido (o anche più di uno) e assicurati che mocked i campi riflettono i campi nella query, a volte quando si tenta di creare una query, non siamo in grado di inserire documenti di esempio poiché la loro struttura non è valida. Inoltre, se ti aspetti un determinato risultato alla fine del processo p, allega l'esempio previsto.

  4. Problemi di set di repliche/sharding:aggiungi rs.config() / sh.status() e rimuovere i dati dell'host (se sensibili)

  5. Se hai domande specifiche sul driver/framework, mostra cosa è stato fatto e dove hai riscontrato il problema. A volte è molto difficile tradurre la query dalla sintassi della shell mongo alla sintassi del driver/framework, quindi se puoi provare a creare quella query nella shell mongoDB e avere un esempio in esecuzione, aggiungilo alla domanda.

Esempi:

RE:1

Utilizzando mongo 2.6 su laptop Windows non riesco ad avere una raccolta superiore a 2 GB, perché?

RE:2

La mia query db.collection.find({isValid:true}) richiede più di 30 secondi, vedere la spiegazione dell'output:

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

Ho problemi a ottenere gli ultimi 3 elementi dell'array da ogni record nella mia pipeline di aggregazione, mongo 3.2.3

la mia domanda:db.collection.aggregate([{aggregation pipeline}])

schema del documento:

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

Ho problemi con il mio set di repliche, i dati non vengono replicati su altri server utilizzando mongo 3.2, sotto il dump di rs.config:

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

RE:5

Ho una query di aggregazione in mongo e ho problemi a ottenere il risultato digitato da c# conducente

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]
                }
            }
        }
    ])

il mio codice 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();


    }
}

Buona richiesta!