모든 Mongo 컬렉션을 루프하고 쿼리 실행
우선, 몽고드는 처음입니다.여기 제가 해결책을 찾지 못한 질문이 있습니다.
제가 세 가지 다른 컬렉션을 가지고 있다고 가정해 보겠습니다.
mongos> show collections
collectionA
collectionB
collectionC
이 데이터베이스의 모든 컬렉션에서 반복되는 스크립트를 만들고 각 컬렉션에서 마지막으로 삽입된 타임스탬프를 찾습니다.몽고 안에서 작동하는 것은 다음과 같습니다.
var last_element = db.collectionA.find().sort({_id:-1}).limit(1);
printjson(last_element.next()._id.getTimestamp());
ISODate("2014-08-28T06:45:47Z")
문제(모든 컬렉션에서 반복)
뭔가를 할 수 있는 가능성이 있습니까?
var my_collections = show collections;
my_collections.forEach(function(current_collection){
print(current_collection);
});
여기서 문제는, 다음과 같은 과제입니다.my_collections
작동하지 않습니다.알겠습니다SyntaxError: Unexpected identifier
'쇼' 문구를 인용해야 합니까?그게 가능할까요?
문제(수집을 jsvar에 저장)
다음을 수행하여 문제 1을 해결할 수 있습니다.
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()
다음 오류가 발생합니다.
오류 hasNext: src/mongo/shell/query.js:124에서 false가 발생했습니다.
last_element가 올바르게 저장되지 않은 것 같습니다.
제가 뭘 잘못하고 있는지에 대한 제안이 있나요?
갱신하다
닐스의 대답은 저를 이 해결책으로 이끌었습니다.그의 코드 외에도 나는 기능이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)")
}
}
});
있습니다.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()
가능한 빈 컬렉션을 제공하기 위해 체크인합니다.
다음 스크립트를 사용하여 모든 레코드에 있는 컬렉션 이름의 이름을 변경합니다.
db = db.getSiblingDB("admin");
dbs = db.runCommand({ "listDatabases": 1 }).databases;
dbs.forEach(function(database) {
db = db.getSiblingDB(database.name);
db.currentname.renameCollection("newname");
});
언급URL : https://stackoverflow.com/questions/25543452/loop-through-all-mongo-collections-and-execute-query
'programing' 카테고리의 다른 글
Python에서 점과 쉼표가 있는 문자열을 플로트로 변환하려면 어떻게 해야 합니까? (0) | 2023.07.17 |
---|---|
날짜 문자열을 다른 형식으로 변환하는 방법 (0) | 2023.07.17 |
RGB 색 튜플을 16진수 문자열로 변환 (0) | 2023.07.17 |
아나콘다에서 이전 패키지로 되돌리려면 어떻게 해야 합니까? (0) | 2023.07.17 |
Amazon MWS - 계산된 요청 서명이 제공된 서명과 일치하지 않습니다. (0) | 2023.07.17 |