Android Cloudant 同步查询
Android Cloudant sync query
正如文档所说(https://github.com/cloudant/sync-android/blob/master/doc/query.md)我正在尝试在列表中进行查询
看:
query.put("codigo", 4);
result = q.find(query);
for (DocumentRevision revision : result) {
Log.d("QueryTest", "Test1 :" + revision.getBody().toString());
}
return:
{ "codigo":4, "companies":[
{
"id":"b9f19d88-13c0-40e3-89de-63dc787afb4c",
"name":"Filial 0 1488949817178"
},
{
"id":"f17fb098-316e-4d33-a0f7-f5719bf9d62e",
"name":"Filial 1 1488949817178"
} ], "employees":[
{
"codigo":2891,
"id":"cc54fa37-0b64-4108-869a-1303c6176ce5",
"name":"Employee 0 79ed4"
},
{
"codigo":4642,
"id":"19b76bbc-82c7-4295-a385-82ac2d892458",
"name":"Employee 1 e1102"
} ], "id":"ef2d0ebf-50b9-4cd0-9aaf-5389bccaaa56", "nome":"Random 4" }
所以没问题
但是这个查询不起作用:
query.put("employees.codigo", 2891);
先return:
QuerySqlTranslator: No single index contains all of
[{employees.codigo={$eq=2891}}]; add index for these fields to query
efficiently
创建索引后:
Index i = q.createJsonIndex(Arrays.<FieldSort>asList(new FieldSort("employees.codigo")), null);
return
QueryExecutor: Projection fields array is empty, disabling project for
this query
所以我创建了要过滤的字段数组列表
List<String> fields = Arrays.asList("codigo");
result = q.find(query, 0 , 0 , fields, null);
nothing returned
添加更多一个字段来过滤:
query.put("codigo",4)
query.put("employees.codigo", 2891);
returned: Complain about index
创建了另一个索引:
i = q.createJsonIndex(Arrays.<FieldSort>asList(new FieldSort("employees.codigo"), new FieldSort("codigo")), null);
returned: Nothing
怎么了?
如何通过 child 获取文档以及如何仅获取 children?
谢谢
我认为这是不受支持的,参见the doc on unsupported features,特别是突出显示的条目:
Arrays
- Dotted notation to index or query sub-documents in arrays.
- Querying for exact array match, { field: [ 1, 3, 7 ] }.
- Querying to match a specific array element using dotted notation, { field.0: 1 }.
- Querying using $all.
- Querying using $elemMatch.
正如文档所说(https://github.com/cloudant/sync-android/blob/master/doc/query.md)我正在尝试在列表中进行查询
看:
query.put("codigo", 4);
result = q.find(query);
for (DocumentRevision revision : result) {
Log.d("QueryTest", "Test1 :" + revision.getBody().toString());
}
return:
{ "codigo":4, "companies":[
{
"id":"b9f19d88-13c0-40e3-89de-63dc787afb4c", "name":"Filial 0 1488949817178" }, {
"id":"f17fb098-316e-4d33-a0f7-f5719bf9d62e", "name":"Filial 1 1488949817178" } ], "employees":[
{
"codigo":2891, "id":"cc54fa37-0b64-4108-869a-1303c6176ce5", "name":"Employee 0 79ed4" }, {
"codigo":4642, "id":"19b76bbc-82c7-4295-a385-82ac2d892458", "name":"Employee 1 e1102" } ], "id":"ef2d0ebf-50b9-4cd0-9aaf-5389bccaaa56", "nome":"Random 4" }
所以没问题
但是这个查询不起作用:
query.put("employees.codigo", 2891);
先return:
QuerySqlTranslator: No single index contains all of [{employees.codigo={$eq=2891}}]; add index for these fields to query efficiently
创建索引后:
Index i = q.createJsonIndex(Arrays.<FieldSort>asList(new FieldSort("employees.codigo")), null);
return
QueryExecutor: Projection fields array is empty, disabling project for this query
所以我创建了要过滤的字段数组列表
List<String> fields = Arrays.asList("codigo");
result = q.find(query, 0 , 0 , fields, null);
nothing returned
添加更多一个字段来过滤:
query.put("codigo",4)
query.put("employees.codigo", 2891);
returned: Complain about index
创建了另一个索引:
i = q.createJsonIndex(Arrays.<FieldSort>asList(new FieldSort("employees.codigo"), new FieldSort("codigo")), null);
returned: Nothing
怎么了?
如何通过 child 获取文档以及如何仅获取 children?
谢谢
我认为这是不受支持的,参见the doc on unsupported features,特别是突出显示的条目:
Arrays
- Dotted notation to index or query sub-documents in arrays.
- Querying for exact array match, { field: [ 1, 3, 7 ] }.
- Querying to match a specific array element using dotted notation, { field.0: 1 }.
- Querying using $all.
- Querying using $elemMatch.