首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中如何在Couchbase-lite中实现"WHERE“条件

在Android中如何在Couchbase-lite中实现"WHERE“条件
EN

Stack Overflow用户
提问于 2016-06-05 11:10:19
回答 4查看 628关注 0票数 2

我希望找到特定键具有相同给定值的所有文档。在SQL中,可以使用WHERE子句实现这一点。在Mongo,我可以使用find()。但我不知道如何在Android的Couchbase-lite中实现这一点。如果有人能帮助解决这个问题,那就太好了。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-14 14:02:52

我就是这样解决问题的。

用于创建和初始化视图的代码:

代码语言:javascript
复制
com.couchbase.lite.View dateTimeView = database.getView("dateTimeView");
dateTimeView.setMap(new Mapper() {
    @Override
    public void map(Map<String, Object> document, Emitter emitter) {
        String dateTime = (String) document.get(QuickstartPreferences.DATE_TIME); // String for Key
        emitter.emit(dateTime, null);        
    }
}, "1");

查询上述视图的代码:

代码语言:javascript
复制
Query query = database.getView("dateTimeView").createQuery();
query.setLimit(100);
query.setStartKey(date_time); //to retreive records for a given date_time value
query.setEndKey(date_time); 
QueryEnumerator result = null;
try {
    result = query.run();    
    for (Iterator<QueryRow> it = result; it.hasNext(); ) {
        QueryRow row = it.next();
        <String, Object> map = row.getDocument().getProperties();
        String employeeName = map.get(QuickstartPreferences.EMPLOYEE_NAME).toString(); // String for Key
        if(employeeName.equalsIgnoreCase(employee_name)) {
            // other logic
        }
    }
} catch (CouchbaseLiteException e) {
    e.printStackTrace();
}

这里最重要的一点是,当您对视图进行setMap时,查询字段的值必须设置为Key (而不是Value)。value可能是null。然后,您可以轻松地使用setStartKeysetEndKey函数。

票数 3
EN

Stack Overflow用户

发布于 2016-06-07 20:54:27

CouchbaseLite是基于映射/约简的概念。您必须在数据库上定义一个视图,然后设置它的Map函数,该函数将在数据库中的每个文档上运行,并为所需的查询创建索引。例如:

代码语言:javascript
复制
View userView= database.getView("User");
userView.setMap(new Mapper() {
    @Override
    public void map(Map<String, Object> document, Emitter emitter) {
        // Your Logic here
        String Id = document.get("Id").toString();
        if (Id != null && Id.contains("John")) {
            emitter.emit(Id, document);
        }
    }
}, "1");
Query query = userView.createQuery();
QueryEnumerator result = query.run();
for (Iterator<QueryRow> it = result; it.hasNext(); ) {
    QueryRow row = it.next();
    Log.e("myDocument", row.getDocument().toString())
}

不幸的是,CouchbaseLite还不支持N1QL,但我读到了他们未来的路线图。

票数 1
EN

Stack Overflow用户

发布于 2016-06-06 20:45:48

Couchbase Lite不使用查询语言;它使用map/reduce。听起来好像你以前没见过。我们有关于地图/减少视图的工作方式的文档以及如何查询它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37641164

复制
相关文章

相似问题

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