Mit Python-Eve kann nicht mithilfe eines Zeichenfolgenfelds gefiltert werden, wenn der Wert die _id für ein anderes Objekt in Mongodb ist

StackOverflow https://stackoverflow.com//questions/21011247

  •  21-12-2019
  •  | 
  •  

Frage

Ich erlebe ein seltsames Verhalten, wenn ich versuche, eine Sammlung mit Python-Eve zu filtern. Wenn ich mit dem Parameter „where“ ein Feld filtere, das die _id eines anderen Dokuments als Wert enthält, wird kein Datensatz zurückgegeben, wenn ich einen zusätzlichen Buchstaben hinzufüge. Wenn nach dem Feldwert eine Zahl angegeben wird, wird der Datensatz ohne Probleme zurückgegeben. Das gleiche Verhalten tritt bei jedem Feld auf, das eine _id als Wert hat.Wie ich im Profil sehe, sieht der Wert beim Aufrufen der DB in ein $ oid um, aber ich bin mir nicht sicher, warum eine Idee?

Danke Gaston

URL

http://127.0.0.1:5000/contacts?where={"task":"52cdad82a54d7506bc6f9a12"}

Zurückgegebene Daten

<resource href="/contacts" title="contacts">
    <link rel="parent" href="" title="home"/>
</resource>

Settings.py

contacts= {
    'resource_methods': ['GET', 'POST'],
     'schema':  {

             "timestamp":  {
             'type': 'datetime',
         },
            "task":  {
                'type': 'string'
            },
                "contact_uuid":  {
                'type': 'string'
            },
                "started_by":  {
                'type': 'string'
            },
        }
}

MongoDB-Datensatz

{
"_id": {
    "$oid": "52cdc33ca54d75085073e7ef"
},
"timestamp": {
    "$date": "2014-01-08T21:29:32.603Z"
},
"task": "52cdad82a54d7506bc6f9a12",
"contact_uuid": "43acc81a-bdd2-42dd-bc0f-8279ddd497f4",
"started_by": "admin"
}

MongoDB-Profilausgabe

{
"op": "query",
 "ns": "callc.contacts",
 "query": {
"task": {
  "$oid": "52cdad82a54d7506bc6f9a16"
    }
  },
"ntoreturn": 10,
"ntoskip": 0,
"nscanned": 9,
"keyUpdates": 0,
"numYield": 0,
  "lockStats": {
"timeLockedMicros": {
      "r": 172,
  "w": 0
    },
"timeAcquiringMicros": {
  "r": 4,
  "w": 4
}
  },
  "nreturned": 0,
  "responseLength": 20,
  "millis": 0,
  "ts": {
    "$date": "2014-01-09T04:04:31.578Z"
  },
  "client": "XXX.17.153.XXX",
  "allUsers": [
    {
      "user": "xxxxx",
      "userSource": "callc"
    }
  ],
      "user": "xxxx@callc"
}

Ich verwende eine in Mongolab gehostete Datenbank mit Mongod 2.4.7

Und virtualenv mit der folgenden „pip freeze“-Ausgabe

  • Cerberus==0.4.0
  • Eva==0,2
  • Ereignisse==0.2.0
  • Kolben==0,10,1
  • Flaschenprinzip==0.4.0
  • Flask-PyMongo==0.3.0
  • Flask-Uploads==0.1.3
  • Kolben-WTF==0,9,3
  • Jinja2==2.7
  • MarkupSafe==0,18
  • WTForms==1.0.5
  • Werkzeug==0.9.4
  • Blinker==1.3
  • flask-mongoengine==0.7.0
  • Es ist gefährlich == 0,22
  • mongoengine==0.8.6
  • passlib==1.6.1
  • py==1.4.18
  • pymongo==2.6.3
  • pytest==2.4.2
  • Anfragen==2.1.0
  • simplejson==3.3.0
  • wsgiref==0.1.2
War es hilfreich?

Lösung

Die neueste Entwicklerversion unterstützt query_objectid_as_string.Stellen Sie es ein True für Ihr „Aufgaben“-Feld und es sollte Ihnen gut gehen.Sehen Dokumente für Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top