我在settings.py,
中定义了以下资源builds = {
'item_title': 'builds',
'schema': {
'sources': {
'type': 'list',
'schema': {
'type': 'objectid',
'data_relation': {
'resource': 'sources',
'embeddable': True,
}
}
},
'checkin_id': {
'type': 'string',
'required': True,
'minlength': 1,
},
}
}
当我尝试根据值为objectid的成员进行过滤时,我会得到空列表。
http://127.0.0.1:5000/builds?where={"sources":"54e328ec537d3d20bbdf2ed5"}
54e328ec537d3d20bbdf2ed5是来源的身份
有没有这样做?
答案 0 :(得分:3)
您的查询应该可以正常运行,假设您在54e328ec537d3d20bbdf2ed5
个文档中的任何sources
字段中实际包含builds
值。
我的意思是,您无法向builds
端点查询sources
端点中是否存在文档(您当然可以在sources
处执行此操作但是,如果您实际存储 builds 文档并且它引用了 sources 文档,那么您的查询将正常工作,因为您实际要求的是"给我所有 builds 文件,这些文件引用了这个来源文件"。例如,如果您将此类文档发布到builds
端点:
{
"sources": ["54e328ec537d3d20bbdf2ed5"]
"checkin_id": "A"
}
然后这个查询:
http://127.0.0.1:5000/builds?where={"sources":"54e328ec537d3d20bbdf2ed5"}
将返回那个文件。当然,既然您将sources
定义为可嵌入,您也可以这样做:
http://127.0.0.1:5000/builds?where={"sources":"54e328ec537d3d20bbdf2ed5"}&embedded={"sources":1}
这将为您提供嵌入任何匹配文档的参考文档,如下所示:
{
"sources": [{"field1": "hey", "field2":"I'm an embedded source"}]
"checkin_id": "A"
}
而你会得到一个原始的'没有显式嵌入的文档。值得一提的是,您还可以启用predefined embedding引用的资源,这样您的客户就不必明确请求嵌入。
希望这有帮助。
答案 1 :(得分:0)
夏娃新手,但我在Nicola"上工作了#34;因为我的经验是它没有,因为这个问题是在试图处理弄清楚原因的挫折...
调试这个库让我达到了这样的程度,即夏娃自动地决定具有看起来像" 54e328ec537d3d20bbdf2ed5"应该转换为ObjectId,这一切都很好。但是,ObjectId:54e328ec537d3d20bbdf2ed5类型与类型字符串:54e328ec537d3d20bbdf2ed5的比较不相等,因此您的过滤器不返回任何结果
真正简单的解决方案是将checkin_id更改为ObjectId。夏娃初学者可以放心,你不需要所有额外的装饰,所以在上面的例子中只需更改键入':' string'到'键入':' objectId'并且会很好。具体来说,如果您调用此字段被定义为字符串的代码,您可以保持原样,如上所述,转换将在eve中发生,并且它将按预期工作。
编辑 - 参见eve的架构级别" query_objectid_as_string"读取时的配置设置似乎会覆盖此行为。