执行couchdb中的条件

时间:2016-07-13 14:35:22

标签: java gwt couchdb

这是我的数据库架构:

Database name: user
_id 74acd65e6eeb6d55809a950036000f50
_rev 1-f5ca343d0688d7a01b549e5c29a4a911
Budget dsds
user_Id abc123
Name ssdsd

现在我想要的是使用GWT检索所有"user_Id":"ssdsd"的记录。

与mysql类似:select * from user where user_Id=ssdsd

请通过以下代码指导我

public String view(String user_id) throws IllegalArgumentException {
        // TODO Auto-generated method stub
        Session s1=new Session("127.0.0.1",5984);
        Database db=s1.getDatabase("users");
        return "";

1 个答案:

答案 0 :(得分:1)

不幸的是我不熟悉GWT,但我认为你的问题与CouchDB有关。

如果您计划为每个用户创建一个且只有一个文档,那么您应该直接使用user_Id作为_id。通过这种方式,您可以获得使用" primary" CouchDb的索引对您有利,同时强制执行唯一的用户ID。 在type属性中存储文档类型是一种很好的做法和惯例。 该文件可能如下所示:

{
  "_id": "user.abc123",
  "type": "user",
  "name": "ssdsd",
  "budget": "dsds"
}  

如果每个user_Id需要多个文档,则需要编写CouchDB视图。您可以阅读CouchDB Docs中的介绍。

这是CouchDB地图功能的一些简单的JavaScript代码:

function (doc) {
  if (doc.user_Id) {
    emit(doc.user_id, {budget: doc.budget});
  }
}

然后,您可以通过使用key "abc123"调用该视图来查询此视图,例如在浏览器中调用此URL:

http://localhost:5984/users/_design/users/_view/users?key=[“ABC123"]

P.S。:如果您还需要身份验证,则可能值得考虑将用户存储在内置数据库_users中。请记住,这个系统db有一些限制:非管理员无法读取其他用户'此数据库中的文档,在那里添加文档时必须满足一些特殊的模式要求。