2016-07-21 4 views
4

각도 j에 대해 mongodb 드라이버를 사용하는 웹 사이트의 경우 서버 js 파일이 시작된 시간의 카운터를 만들고 싶습니다.노드 js의 증가 카운터 mongodb

값이 0 인 변수가있는 명명 된 카운터를 저장 한 다음 서버가 실행될 때마다 그 값을 증가시키고 싶습니다. 내 코드는 아래 있습니다. 당신이 볼 수 있듯이 내 코드 acutally db의 필드를 업데이 트하지 않습니다. 그냥 varible.

그 옆에 ... 음 .. 내가 쓰는 전체 코드는 나쁜 습관처럼 보입니다. 나는 기본적으로 {id : <>, 카운트 : 0}의 문서를 가지고 있으며 단지 1 카운트 필드 만 가지고 있지만 -1 (즉, 정수)보다 큰 모든 카운트 필드를 루핑하고 있습니다.

데이터베이스에서이 1 값을 유지/유지하는 간단한 방법이 없습니까?

가능한 가장 쉬운 방법으로 $ inc와 같은 것을 사용하여 db 내부의 필드를 어떻게 업데이트 할 수 있습니까?

감사

MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    if (err) { 
     console.log(err); 
    } 
    else { 
     console.log("Connected correctly to DB."); 
     var dbusers =db.collection('users'); 
     var cursor =dbusers.find({ "count": { $gt: -1 } }); 
     cursor.each(function(err, doc) { 
      assert.equal(err, null); 
      if (doc != null) { 
       doc.count=doc.count+1; 
      } 
     } 
     ); 
    } 
    db.close(); 
}); 
+0

이'doc.count + 1; '이 무엇인가? –

+0

을 doc.count = doc.count + 1로 업데이트했습니다. – Matoy

+0

db (count)의 값을 1로 늘리는 것으로 가정합니다. – Matoy

답변

2

이 시도 :

MongoClient.connect(url, function(err, db) { 
    if (err) { 
     console.log(err); 
     return db.close(); 
    } 

    console.log("Connected correctly to DB."); 
    // update a record in the collection 
    db.users.update(
     // find record with name "MyServer" 
     { name: "MyServer" }, 
     // increment it's property called "ran" by 1 
     { $inc: { ran: 1 } } 
    ); 
    return db.close(); 
}); 

이것은 당신이 시작하는 데 충분합니다. 당신은 같은 일을하려고있는 것 같습니다 :

  1. 나에게 속성이 컬렉션에있는 모든 개체를 얻을를 '계산'더 이상 -1

  2. 를 1

  3. 하여 가치의 증가
  4. 컬렉션에 저장하십시오.

누락 된 단계는 3 단계입니다. 일괄 업데이트를 수행해야합니다. 내가 준 예제는 단일 레코드를 업데이트하는 것입니다.

here은 증가에 대한 설명서입니다. here은 대량 업데이트를위한 문서입니다.

+1

이 구문은 무엇입니까? 나는 당신의 코드를 시도했을 때 정의되지 않았다 : db.users.update (...). db.collection ('users')을 끝내게되었습니다. updateOne ({ "name": "id"}, \t \t {$ inc : {count : 1}}); 그것을 해결 한 . 나는 affort와 $ inc에 +1을 준다. – Matoy

+0

점 표기법을 사용하여 콜렉션을 참조 할 수있다. db.users는 db.collections ("users")와 동일합니다. 내 솔루션을 찾고 .. 거기에 경쟁 조건이 계속 될 수 있습니다. (또한 "업데이트"는 철자가 잘못되었습니다, "udpate"). 업데이트 전에 연결을 닫을 수 있습니다. 무슨 일이 일어나는지 지금 당장은 db close를 제거하십시오. 또한 가능한 경우 여기에 오류를 게시하십시오. 궁금해. 감사합니다. –

+0

. 귀하의 버전을 사용할 때 db.users는 정의되지 않습니다. 경주 조건은 어디서 볼 수 있습니까? 어쩌면 그 문제는 ... – Matoy