복붙노트

[MONGODB] 루프의 모든 몽고의 컬렉션을 통해 쿼리 실행

MONGODB

루프의 모든 몽고의 컬렉션을 통해 쿼리 실행

첫째, 나는 MongoDB를 아주 새로운 해요. 여기에 내 질문 난에 대한 해결책을 찾을 수 없어했다.

하자 내가 3 명 가지 컬렉션을 말한다.

mongos> show collections
collectionA
collectionB
collectionC

나는 모든 컬렉션을 반복이 데이터베이스를 산업사하는 스크립트를 생성하고 이러한 컬렉션을 각각의 마지막 삽입 된 타임 스탬프를 찾고 싶어요. 여기 mongos 내부에서 작동하는거야.

var last_element = db.collectionA.find().sort({_id:-1}).limit(1);
printjson(last_element.next()._id.getTimestamp());
ISODate("2014-08-28T06:45:47Z")

문제 1 (반복 처리 모든 컬렉션을 통해)

STH 할 수있는 가능성이있다. 처럼.

var my_collections = show collections;
my_collections.forEach(function(current_collection){
    print(current_collection);
});

여기서 문제는, my_collections에 대한 할당이 작동하지 않습니다. 나는 구문 에러를 얻을 : 예기치 않은 식별자. 나는 '쇼'문을 인용해야합니까? 심지어 수 있습니까?

2. 문제점 (JS VAR에 저장 컬렉션)

나는이 작업을 수행하여 문제 하나를 해결 할 수 있습니다 :

var my_collections = ["collectionA", "collectionB", "collectionC"];
my_collections.forEach(function(current_collection){
    var last_element = db.current_collection.find().sort({_id:-1}).limit(1);
    print(current_collection);
    printjson(last_element.next()._id.getTimestamp());
});

last_element.next ()는 다음과 같은 오류가 발생합니다 :

last_element가 제대로 저장되지 않습니다 보인다.

모든 내가 잘못을 뭘하는지에 대한 제안?

최신 정보

Neils이 솔루션에 저를 이끌어 대답합니다. 자신의 코드에 더하여 나는 기능 getTimestamp가 실제로 존재하는지 확인해야했다. 일부 '가상'컬렉션에 대한 _id 특성 수없는 것으로 보인다.

db.getCollectionNames().forEach(function(collname) {
    var last_element = db[collname].find().sort({_id:-1}).limit(1);
    if(last_element.hasNext()){
        var next = last_element.next();
        if(next._id !== undefined && typeof next._id.getTimestamp == 'function'){
           printjson(collname + " >> "+next._id.getTimestamp());
        }else{
          print(collname + " undefined!! (getTimestamp N/A)")
        }
    }
});

해결법

  1. ==============================

    1.당신을 위해이 작업을 수행하는 db.getCollectionNames () 헬퍼 방법이있다. 그런 다음 코드를 구현할 수 있습니다 :

    당신을 위해이 작업을 수행하는 db.getCollectionNames () 헬퍼 방법이있다. 그런 다음 코드를 구현할 수 있습니다 :

    db.getCollectionNames().forEach(function(collname) {
        // find the last item in a collection
        var last_element = db[collname].find().sort({_id:-1}).limit(1);
        // check that it's not empty
        if (last_element.hasNext()) {
            // print its timestamp
            printjson(last_element.next()._id.getTimestamp());
        }
    })
    

    당신은 아마 수도 빈 컬렉션에 대한 수용도에 .hasNext () 체크를합니다.

  2. from https://stackoverflow.com/questions/25543452/loop-through-all-mongo-collections-and-execute-query by cc-by-sa and MIT license