couchdb - Daten finden ohne id

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sophe_9
User
Beiträge: 34
Registriert: Dienstag 7. Mai 2019, 10:40

Ich versuche gerade, mit couchdb-python bestimmte Daten zu finden. Geht das nur über views?
Mir ist dabei nicht klar, wie eine Abfrage ohne eine direkte ID funktioniert. Ich habe zwei Documente ("_id": "mess_21" , "_id": "mess_20) und möchte jeweils den Wert von "Flow". Wenn möglich über "Gauge": "SN7463" suchen und nicht wie in meinem Beispiel über die IDs.

Code: Alles auswählen

import couchdb 
couch = couchdb.Server('http://127.0.0.1:5984')
db = couch['lab_db'] 
doc1 = db.get("mess_21") 
doc2 = db.get("mess_20") 
q1=doc1["Calibration"]["Result"]["Flow"]
q2=doc2["Calibration"]["Result"]["Flow"]

Code: Alles auswählen

{
  "_id": "mess_21",
  "_rev": "3-6bd0f60e7e835a9d1c09534ccf973546",
  "Calibration": {
    "Certificate": 21,
    "Gauge": "SN7463",
    "Year": "2021",
    "Result": {
        "No": "8",
        "Flow": "5.005E-12",
        "Date": "2021-04-19",
        "Uncertainty": "1.9"
    }
  }
  

Code: Alles auswählen

{
  "_id": "mess_20",
  "_rev": "1-15d3f619175d9e4fc4d1866060befa57",
  "Calibration": {
    "Certificate": 20,
    "Gauge": "SN7463",
     "Year": "2021",
    "Result": {
      "No": "8",
      "Flow": "4.9E-12",
      "Date": "2020-03-11",
      "Uncertainty": "1.9"
    }
  }
}
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ewig nichts mehr von CouchDB gehoert und gesehen. Das woran ich mir erinnere: sowas macht man mit Views mE nach. Siehe hier: https://docs.couchdb.org/en/stable/ddoc ... index.html
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ewig nichts mehr von CouchDB gehoert und gesehen.
Dito. Die letzte Version, die ich genutzt habe, war glaube ich ... 1.2?

Zur Frage: mit

Code: Alles auswählen

function(doc) {
    if (doc.Calibration.Gauge == 'SN7463')
      emit(doc.Calibration.Result.Flow, null);
}
sollte eigentlich liefern, was du brauchst. Den Rückgabewert von `emit` musst du halt ggf. noch abpassen.

Gruß, noisefloor
Antworten