首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在couchbase-lite android中对文档进行排序和查询

在couchbase-lite android中对文档进行排序和查询
EN

Stack Overflow用户
提问于 2018-02-26 19:55:19
回答 1查看 284关注 0票数 1

我想要做的是查找与某个id匹配并按名称排序的所有记录。数据看起来像这样:

代码语言:javascript
复制
{
    type:"receiving",
    saleName:"Harshitha",
    penId:"7aac88118420858d62f5ea55e22"
}
{
    type:"receiving",
    saleName:"Tom",
    penId:"81fb1a79526f4e2bdc77aa7d73d"
}
{
    type:"receiving",
    saleName:"James",
    penId:"81fb1a79526f4e2bdc77aa7d73d"
}

我想要获取具有按saleName排序的特定penID的文档。例如:-我想获取具有此penId‘81fb1a79526f4e2bdc77aa7d73d’的文档,并按saleName对它们进行排序。像这样的顺序:

代码语言:javascript
复制
{
    type:"receiving",
    saleName:"James",
    penId:"81fb1a79526f4e2bdc77aa7d73d"
}
{
    type:"receiving",
    saleName:"Tom",
    penId:"81fb1a79526f4e2bdc77aa7d73d"
}

我这样的看法,

代码语言:javascript
复制
View view = database.getView("receiving_view");
  if (view.getMap() == null) {
      view.setMap(new Mapper() {
          @Override
          public void map(Map<String, Object> document, Emitter emitter) {
              if (document.get("type").equals("receiving") ) {

                  List<Object> keys = new ArrayList<Object>();
                  keys.add(document.get("penId"));
                  keys.add(document.get("saleName"));

                  emitter.emit(keys, document);
              }
          }
      }, "1.1");
  }
  return view;

然后我试着得到这样的数据,

代码语言:javascript
复制
View view = getView("receiving_view");
Query query = view.createQuery();

List<Object> keys = new ArrayList<Object>();
keys.add("81fb1a79526f4e2bdc77aa7d73d");

List<Object> allKeys = new ArrayList<Object>();
allKeys.add(keys);
query.setKeys(allKeys);
query.run();

它不工作是因为我传递了一个键,但它们是视图…中的两个键但我不能将‘saleName’作为键传递,因为我只想按‘saleName’排序。做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-27 20:59:22

最后我找到了解决方案。我不想在这里使用setKeys,我应该使用键的范围,而不是一组特定的键。

我将startKey设置为[penID],将endKey设置为[penID, {}]。空映射在任何其他值之后进行排序,因此此键范围包括所有以penID开头的键。我改变了我的数据获取方法。这是它看起来的样子,

代码语言:javascript
复制
View view = getView("receiving_view");
Query query = view.createQuery();

query.setStartKey(Arrays.asList("81fb1a79526f4e2bdc77aa7d73d"));
query.setEndKey(Arrays.asList("81fb1a79526f4e2bdc77aa7d73d", new HashMap<String, Object>()));
query.run();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48987965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档