MongoDB

Ange en anslutnings sträng och ett db-namn om du vill konfigurera en MongoDB-anslutning.

Anslutningssträng

  • Det enklaste: mongodb://username:password@hostname:port/dbname
  • Med SSL aktiverat: mongodb://username:password@hostname:port/dbname?ssl=true
  • Med SSL aktiverat och självsignerade certifikat (inaktiverar certifikat verifiering): mongodb://username:password@hostname:port/dbname?ssl=true&ssl_cert_reqs=CERT_NONE

Om det behövs kan du skicka ytterligare anslutnings alternativ i frågesträngen. Se fullständig information i [anslutnings alternativ] ( https://docs.mongodb.com/manual/reference/connection-string /#connection-alternativ).

Du kanske märker att det finns ett separat fält för databas namnet i konfigurationen av data källan och att vi även inkluderar det i anslutnings strängen. Detta krävs vanligt vis för delade värdar som MLab.

MongoDB Atlas

Eftersom de finns i en delad miljö kan det vara problematiskt att ansluta till MongoDB för kostnads fria nivåer. Använd en anslutnings sträng i formatet för bästa resultat:

mongodb+srv://<user>:<password>@<subdomain>.mongodb.net/<database>?retryWrites=true

Felsökning

Fel: "SSL-hand skakningen misslyckades: [SSL: CERTIFICATE_VERIFY_FAILED] certifikat verifieringen misslyckades"

Detta inträffar vanligt vis när MongoDB-servern använder självsignerade certifikat. Du kan antingen växla till ett korrekt signerat certifikat eller lägga till ssl_cert_reqs=CERT_NONE alternativet i anslutnings strängen.

Skriv din MongoDB-fråga som ett JSON-objekt. Under körningen kommer SQL Analytics att konvertera den till antingen ett db.collection.find() anrop eller ett db.collection.aggregate() anrop. Så här mappas JSON-objektet och skickas till MongoDB:

MongoDB-token Var du ska skriva i SQL Analytics
db På skärmen konfiguration av data Källa
collection Lägg till en collection nyckel i objektet fråga
query Lägg till en query nyckel i objektet fråga
projection Lägg till en fields nyckel i objektet fråga
.sort() method Lägg till en sort nyckel i objektet fråga
.skip() method Lägg till en skip nyckel i objektet fråga
.limit() method Lägg till en limit nyckel i objektet fråga
Metoden db.collection.count() Använd en count nyckel med valfritt värde i objektet fråga

Värdena som du använder för varje nyckel skickas oförändrade som parametrar till MongoDB.

Fråge exempel

Exempel på enkla frågor

{
  "collection": "my_collection",
  "query": {
    "type": 1
  },
  "fields": {
    "_id": 1,
    "name": 2
  },
  "sort": [{
    "name": "date",
    "direction": -1
  }]
}

En motsvarande fråga i Java Script skrivs: db.my_collection.find({"type": 1}, {"_id": 1, "name": 2}).sort([{"name": "date","direction": -1}])

Exempel på antal frågor

{
  "collection": "my_collection",
  "count": true
}

Aggregering

Agg regeringen använder en syntax som liknar den som används i PyMongo. Men för att stödja sorterings ordningen använder den en vanlig lista för åtgärden "$sort" som konverteras till en SON (sorterad ord lista)-objekt före körning.

Exempel på agg regerings fråga:

{
  "collection": "things",
  "aggregate": [{
    "$unwind": "$tags"
  }, {
    "$group": {
      "_id": "$tags",
      "count": {
        "$sum": 1
      }
    }
  }, {
    "$sort": [{
      "name": "count",
      "direction": -1
    }, {
      "name": "_id",
      "direction": -1
    }]
  }]
}

MongoDB Extended JSON-stöd

Vi stöder MongoDB utökade JSON tillsammans med vårt eget tillägg – $humanTime :

{
  "collection": "date_test",
  "query": {
    "lastModified": {
      "$gt": {
        "$humanTime": "3 years ago"
      }
    }
  },
  "limit": 100
}

Den accepterar en läsbar sträng som ovan ("3 år sedan", "igår" osv.) eller tidsstämplar.

Anteckning

$humanTimeFunktionen behövs också när du använder frågeparametrar av typen datum eller datum/tid med MongoDB, på grund av skillnaden mellan formatet SQL Analytics-användning och den enda MongoDB förväntar sig.

När du använder ett datum-eller datum intervall-parameter omsluter du det med ett $humanTime objekt: {{param}} blir {"$humanTime": "{{param}} 00:00"} ( 00:00 suffixet behövs bara med datum parametrar, för datum/tid-parametrar du bör hoppa över det).

MongoDB-filtrering

Du kan lägga till filter till Mongo-frågor genom att projicera en kolumn med nyckelordet ':: filter ' tillagt i slutet.

{
  "collection": "zipcodes",
  "aggregate": [{
    "$project": {
      "_id": "$_id",
      "city": "$city",
      "loc": "$loc",
      "pop": "$pop",
      "state::filter": "$state"
    }
  }]
}

Exemplet ovan visar en "State"-kolumn och tillåter att du filtrerar på den här kolumnen.

Felsökning

Sortering överskred minnes gränsen på 104857600 byte

Sorteringen överskred minnes gränsen på 104857600 byte, men det gick inte att välja extern sortering. Åtgärden avbryts. Pass allowDiskUse:true för att välja.

I MongoDB har InMemory-sorteringen en gräns på 100 miljoner för att utföra en stor sortering, men du måste aktivera allowDiskUse alternativ för att skriva data till en temporär fil för sortering.

Om du vill aktivera allowDiskUse alternativet lägger du bara till alternativet i frågan:

{
  "allowDiskUse": true
}