• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 post 컬렉션안의 document(?) 의 개수를 알고싶어요

post 컬렉션안의 document(?) 의 개수를 알고싶어요

7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 글쓴이
  • #69394

    이순민
    참가자
    post 컬렉션에 제가 작성한 글들이 저장되는데 글들의 개수를 알고싶어요.
    
    그리고 이 개수를 MongoDB change stream 기능으로 실시간감지해서
    counter 컬렉션 totalPost를 변동시켜줄수 있나요?
    #69419

    codingapple
    키 마스터
    db.collection().countDocuments() 쓰면 된다는거같은데 함 찾아봅시다 
    
    #69425

    이순민
    참가자
    효율적인코드인지는 모르겠지만 제가 구현해봤는데 한번 봐주세요.
    
    post 컬렉션에 있는 도큐먼트 다 불러오고 그 결과 length붙여서 TotalPost라는 변수에 넣었더니
    post컬렉션의 도큐먼트 개수가 나옵니다.
    그리고 홈페이지( 경로 : '/'로 get 요청할때)로 접속할때 마다 counter 컬렉션의 totalPost의 개수를 갱신합니다.
    
    app.get('/', function (요청, 응답) {
      var TotalPost;
      db.collection('post').find().toArray(function (에러, 결과) {
        TotalPost = 결과.length
        db.collection('counter').updateOne({ name: "게시물개수" }, { $set: { totalPost: TotalPost } }, function (에러, 결과) {
          console.log('홈페이지 접속, 총게시물수 업데이트 완료')
        })
      })
    })
    
    저는 db.collection.estimatedDocumentCount() 문법이 안먹혀서 위와같이 구현해봤습니다.
    // db.collection.estimatedDocumentCount() 관련 메뉴얼 주소
    https://www.mongodb.com/docs/manual/reference/method/db.collection.estimatedDocumentCount/#mongodb-method-db.collection.estimatedDocumentCount
    
    
    
    
    #69445

    codingapple
    키 마스터
    데이터가 많으면 비효율적일 수도 있을텐데db.collection('post').estimatedDocumentCount() 해봅시다
    #69614

    이순민
    참가자
    아래와같이 출력되었고 검색해보니 비동기형식으로 접근해야한다고 하네요 async, await 이용해야할거같은데
    아직 제가 못배운부분입니다. 혹시 어떤식으로 적으면 출력될까요?
    
    TotalPost = db.collection('post').estimatedDocumentCount({});
        console.log('log',TotalPost)
    //출력
    log Promise { <pending> }
    
    아래는 홈페이지로 이동 전체 코드입니다.
    // 홈페이지로 이동
    app.get('/', function (요청, 응답) {
      var page = Number(요청.query.pageNum || 1);
      var perPage = Number(요청.query.perPage || 10);
      var TotalPost;
      var totalPage;
        TotalPost = db.collection('post').estimatedDocumentCount({});
        console.log('log',TotalPost)
        db.collection('counter').updateOne({name:"게시물개수"}, {$set: {totalPost: TotalPost}},function(에러,결과){
          // console.log('index에서 총게시물수 업데이트 완료')
          db.collection('post').find().
            skip(perPage * (page - 1)).
            limit(perPage).toArray(function (에러, 퍼페이지결과) {
              totalPage = Math.ceil(TotalPost / perPage);
              응답.render(__dirname + '/views/index.ejs', { totalPage: totalPage, posts: 퍼페이지결과, perPage: perPage})
            });
        });
      });
    //===========================
    
    #69675

    codingapple
    키 마스터
    async function (요청, 응답) { 
    넣고
    TotalPost = await db.collection('post').estimatedDocumentCount();
    해봅시다
    #70898

    이순민
    참가자
    감사합니다. estimatedDocumentCount();를 통해 도큐먼트의 개수를 얻을 수 있었습니다!
    
    
    // 홈페이지로 이동
    app.get('/', async function (요청, 응답) {
      var page = Number(요청.query.pageNum || 1);
      var perPage = Number(요청.query.perPage || 10);
      var TotalPost;
      var totalPage;
        TotalPost = await db.collection('post').estimatedDocumentCount();
        console.log(TotalPost);
        db.collection('counter').updateOne({ name: "게시물개수" }, { $set: { totalPost: TotalPost } }, function (에러, 결과) {
          // console.log('index에서 총게시물수 업데이트 완료')
          db.collection('post').find().
            skip(perPage * (page - 1)).
            limit(perPage).toArray(function (에러, 퍼페이지결과) {
              totalPage = Math.ceil(TotalPost / perPage);
              응답.render(__dirname + '/views/index.ejs', { totalPage: totalPage, posts: 퍼페이지결과, perPage: perPage })
            })
        })
    });
    //===========================
7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠