学生数据库访问 - couchdb

时间:2014-02-20 20:07:00

标签: couchdb couchdb-futon

我想创建一个学生数据库,其中包含有关学生的详细信息 - 身份证,姓名,地址,成绩单,电话等。 我创建了一个这样的结构:

{
 "ssn" : "121-23-1232", 
 "name": "Grace Johnson",
 "address": [
    {"Street Address": "190 Pinehill place", 
    "City": "Belmont",
    "State": "CA",
    "ZipCode": "08250"
    }
    ],
 "phone": "605-123-1111",
 "transcript": [
    {"Math":"B",
    "English":"A",
    "Physics": "B",
    "Psychology": "C",
    "Physical Education": "A"
    }
    ]
 }

然而,如果我希望能够访问住在特定城市的学生,这种创作方法是否正确。我该怎么写呢? 还假设我想让所有在物理学中获得A的学生......

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您想输出居住在特定城市的所有学生,您的地图功能可能如下所示:

function(doc){
  if(doc.address){
    emit([doc.address.city, doc.address.state], doc.name)
  }
}

这将把所有住在城市的学生聚集在一起。因此,您可以执行此GET请求,以查找居住在特定城市的学生:

GET /<viewUrl?start_key=[Belmont,CA]

成绩地图类似:

function(doc){
  if(doc.transcript){
    for(var i = 0; i < doc.transcript.length; i++){
      var classes = Object.keys(doc.transcript[i]);
      for(var j = 0; j < classes.length; j++){
        var class = classes[j];
        emit([class, doc.transcript[j][class]], doc.name)
      }
    }
  }
}

地图将为学生及其成绩发出所有课程。所以它查询它,你可以这样做:

GET /<viewUrl>?key=[Physics,A]