2016-12-02 2 views
0

Node.js에서 couchBase에 대한 사용자 별 뷰를 만들려고합니다. 여기에 내가 디자인 문서 design_users가 카우치베이스 주식회사에 생성되지만 다음과 같은 컬couchBase에서 뷰를 생성하는 동안 json에서 입력 변수를 키로 설정하는 방법

curl -H "Content-Type: application/json" -X POST -d '{"userId": "uidam231"}' http://localhost:3000/todo/id 

을 실행에

app.post("/todo/:id", function(req, res){ 
console.log("hey" + req.body.userId) 
    baseview.setDesign('design_users', { 
    "$req.body.userId": { 
     'map': "function (doc, meta) { if(doc.toUserName == req.body.userId) {emit(doc.status, doc.title);}}" 
     } 
    }, 
    function(err, result){ 
     if (err != null) console.log(err); 
     else res.send(result) 
    } 
); 
}) 

이 코드입니다, 예상보기 (uidam231가) 없습니다. 콘솔에 오류가 없습니다.

json에서 변수 req.body.userId가 할당 된 것이 원인 일 가능성이 있습니다. 뷰 이름 ("$ req.body.userId":)과 필터 기준 (doc.toUserName == req.body.userId)은 모두 전달 된 변수가 필요합니다.

제안 사항을 알려주십시오.

답변

1

map()reduce()은 데이터를 쿼리하지 않고 인덱스를 작성하고 버킷에있는 데이터의 구체화 된 뷰를 작성하고 나중에 수행 할 수 있으므로 뷰에서 맵 함수에 변수를 전달할 수 없습니다 필터링, 범위 지정, 정렬과 같은 작업을 수행하지만 빌드하는 동안 (즉, 맵이 실행될 때) 해당 인덱스에 넣기로 선택한 키를 기반으로합니다. 단순하게 입력하면 데이터베이스는 전체 데이터 세트에 대해 한 번씩 맵 기능을 실행 한 다음 새/변경된 각 문서에 대해 인덱스를 업데이트합니다. 따라서 쿼리의 매개 변수를 전달하거나 사용할 수 없거나 인덱스 시간 동안 각 문서에 대해 값이 한 번만 계산되기 때문에 쿼리 시간이 아닌 new Date() 또는 Math.random()의 의미없는 사용이 발생하는 경우가 있습니다. 당신이 경우에 어떻게해야

,이 같은지도 기능을 구축하는 것입니다 :

function (doc, meta) { 
    emit(doc.toUserName, [doc.status, doc.title]); 
} 

이렇게하면 사용자 이름이 키 및 상태이며, 제목은 값이 인덱스를 볼 줄 것이다. 따라서 사용자는 key= 인수를 사용하여 뷰를 조회하고 사용자 ID를 전달할 수 있습니다.

더 많은 정보 :

  1. Querying Data with Views
  2. MapReduce Views
+0

안녕하세요 @avsej : 나는이 부분을 이해합니다. 내가 달성하고자하는 것은 이것이다. 새로운 사용자 등록에 대해 말하면, (사용자 고유의) 뷰를 couchBase에 추가하고 싶다. 나는 또한 각 사용자를 기반으로보기를 추가하는 스크립트를 실행할 수 있다고 생각합니다. 본질적으로 이는 쿼리가 아닙니다. 지도 함수가 숫자 또는 문자열과 같은 특정 값을 확인하는 뷰입니다. Node.js에서 뷰가 삽입됩니다. (새로 등록 된 각 사용자 당 한 번만) – user1384205

+0

이 경우 사용자 이름을 리터럴로'req.body.userId' 대신'map()'함수 본문으로 대체해야합니다. 보기 이름. 그러나 당신은 당신이 업데이트/단일보기를 추가 할 수 없다는 것을 명심해야한다. 매번 전체 설계 문서를 덮어 써야한다. 어쩌면 N1QL로 문제를 해결할 수 있을까요? – avsej

+0

NiQL은 뷰에 비해 대기 시간이 길어 보입니다. couchbase lite로 클라이언트에서 완화 할 계획입니다. 나는 여전히 위의 문제에서 문자 그대로의 부분으로 변환하는 것을 이해할 수 없다. – user1384205

관련 문제