sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb:db.printShardingStatus() / sh.status() anrop i Java (och JavaScript)

Många av skalets hjälpfunktioner är inte tillgängliga för exekvering av kod på serversidan. I fallet printShardingStatus() , det är vettigt eftersom det inte finns en konsol att använda för utskrift och du hellre vill ha en sträng returnerad. Tack och lov borde du kunna dra upp källan till skalfunktionen och implementera den på nytt i din applikation (t.ex. sammanfoga en returnerad sträng istället för att skriva ut direkt).

$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
    printShardingStatus(this.getSiblingDB("config"), verbose);
}

Så låt oss titta på printShardingStatus() funktion...

> printShardingStatus
function (configDB, verbose) {
    if (configDB === undefined) {
        configDB = db.getSisterDB("config");
    }
    var version = configDB.getCollection("version").findOne();

    // ...
}

Innan du omvandlar alla utdatasatser till strängsammansättning, vill du se till att alla andra DB-metoder är tillgängliga för dig. Prestandamässigt tror jag att det bästa alternativet är att porta insidan av denna funktion till Java och undvika JS-utvärdering på serversidan helt och hållet. Om du dyker djupare in i printShardingStatus() funktion, kommer du att se att det bara utfärdar find() på konfigurationsdatabasen tillsammans med någon group() frågor.

Om du vill hålla fast vid att utvärdera JS och hellre inte vill behålla den här koden i din Java-applikation kan du också titta på lagring av JS-funktioner på serversidan .



  1. Mongoose Pre-Save Hook avfyras, men sparar inte ytterligare fält (inte använder model.update)

  2. mongoose findById fungerar när jag använder en bokstavlig sträng men inte när jag refererar till en egenskap hos ett objekt

  3. Använder positionsoperator med två-nivå hierarkier i Mongo

  4. Skapa korta, unika objekt-id:n i MongoDB