无法使用python-eve使用字符串字段进行过滤当值为其他对象的_id时,mongodb

问题描述:

当我尝试使用python-eve过滤集合时出现奇怪的行为,当我使用“where “参数是包含另一个文档的_id作为值的字段,没有记录返回,如果我在字段值之后添加一个额外的字母/数字记录返回时没有问题,则具有_id作为值的任何字段都会发生相同的行为。正如我在配置文件中看到的那样,在调用db时,值被转换为$ oid,但我不确定为什么 有什么想法?无法使用python-eve使用字符串字段进行过滤当值为其他对象的_id时,mongodb

感谢 加斯顿

URL

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

返回的数据

<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的记录

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

MongoDB的配置文件输出

{ 
"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": "[email protected]" 
} 

我使用mongolab运行托管的数据库的mongod 2.4.7

而且virtualenv中,与下面的 “画中画冻结” 输出

  • Cerberus == 0.4.0
  • Eve == 0.2
  • 活动== 0.2.0
  • 瓶== 0.10.1
  • 瓶校长== 0.4.0
  • 烧瓶PyMongo == 0.3.0
  • 烧瓶上传== 0.1.3
  • 烧瓶WTF == 0.9.3
  • 的Jinja2 == 2.7
  • MarkupSafe == 0.18
  • WTForms == 1.0.5
  • WERKZEUG == 0.9.4
  • 信号灯== 1.3
  • 烧瓶-mongoengine == 0.7.0
  • itsdangerous == 0.22
  • mongoengine == 0.8.6
  • passlib == 1.6.1
  • PY == 1.4。 18
  • pymongo == 2.6.3
  • pytest == 2.4.2
  • 请求== 2.1.0
  • simplejson == 3.3.0
  • wsgiref == 0.1。2
+0

我搬到了最新的开发版本,并且修正了这个问题,在配置中添加了**“query_objectid_as_string”:True **选项 –

最新的dev版本支持query_objectid_as_string。将它设置为True为您的“任务”字段,你应该没问题。详情请参阅docs