수색…


비고

데이터베이스에서 유지 관리 스크립트를 실행해야하는 경우가 있습니다. 입력란의 이름이 변경됩니다. 데이터 구조가 변경됩니다. 지원하기 위해 사용했던 기능이 제거되었습니다. 서비스가 마이그레이션됩니다. 스키마를 변경하려는 이유 목록은 무한합니다. 그래서, '왜'는 꽤 자명합니다.

'방법'은 좀 더 친숙하지 않습니다. SQL 함수에 익숙한 사람들에게는 위의 데이터베이스 스크립트가 이상하게 보일 것입니다. 그러나 이들이 모두 자바 스크립트에서 어떻게 사용되고 있는지 그리고 서버와 클라이언트 모두에서 Meteor 전체에서 사용하는 것과 동일한 API를 사용하는 방법에 주목하십시오. 우리는 데이터베이스, 서버 및 클라이언트를 통해 일관된 API를 제공합니다.

meteor mongo 쉘에서 스키마 이주 명령을 실행하십시오.

# run meteor
meteor

# access the database shell in a second terminal window
meteor mongo

컬렉션의 모든 레코드에 버전 필드 추가

db.posts.find().forEach(function(doc){
    db.posts.update({_id: doc._id}, {$set:{'version':'v1.0'}}, false, true);
});

컬렉션의 모든 레코드에서 배열 제거

db.posts.find().forEach(function(doc){
    if(doc.arrayOfObjects){
        // the false, true at the end refers to $upsert, and $multi, respectively   
        db.accounts.update({_id: doc._id}, {$unset: {'arrayOfObjects': "" }}, false, true);
    }
});

컬렉션 이름 변경

db.originalName.renameCollection("newName" );

특정 문자열을 포함하는 필드 찾기

정규 표현식의 힘은 큰 책임을지고 있습니다 ....

db.posts.find({'text': /.*foo.*|.*bar.*/i})

이전 필드에서 새 필드 만들기

db.posts.find().forEach(function(doc){
    if(doc.oldField){
        db.posts.update({_id: doc._id}, {$set:{'newField':doc.oldField}}, false, true);
    }
});

배열에서 개체를 가져 와서 새 필드에 배치

db.posts.find().forEach(function(doc){
    if(doc.commenters){
        var firstCommenter = db.users.findOne({'_id': doc.commenters[0]._id });
        db.clients.update({_id: doc._id}, {$set:{'firstPost': firstCommenter }}, false, true);

        var firstCommenter = db.users.findOne({'_id': doc.commenters[doc.commenters.length - 1]._id });
        db.clients.update({_id: doc._id}, {$set:{'lastPost': object._id }}, false, true);
    }
});

하나의 콜렉션에서 다른 콜렉션으로 블롭 레코드 (즉, 결합 제거 및 플랫 팅)

db.posts.find().forEach(function(doc){
    if(doc.commentsBlobId){
        var commentsBlob = db.comments.findOne({'_id': commentsBlobId });
        db.posts.update({_id: doc._id}, {$set:{'comments': commentsBlob }}, false, true);
    }
});

확실한 필드가 있는지 확인하십시오.

db.posts.find().forEach(function(doc){
    if(!doc.foo){
        db.posts.update({_id: doc._id}, {$set:{'foo':''}}, false, true);
    }
});

확실한 필드에 특정 값이 있는지 확인하십시오.

db.posts.find().forEach(function(doc){
    if(!doc.foo){
        db.posts.update({_id: doc._id}, {$set:{'foo':'bar'}}, false, true);
    }
});

특정 필드가 특정 값인 경우 레코드 제거

db.posts.find().forEach(function(doc){
    if(doc.foo === 'bar'){
        db.posts.remove({_id: doc._id});
    }
});

필드의 특정 값을 새 값으로 변경

db.posts.find().forEach(function(doc){
    if(doc.foo === 'bar'){
        db.posts.update({_id: doc._id}, {$set:{'foo':'squee'}}, false, true);
    }
});

특정 필드를 Null로 설정 해제

db.posts.find().forEach(function(doc){
    if(doc.oldfield){
        // the false, true at the end refers to $upsert, and $multi, respectively
        db.accounts.update({_id: doc._id}, {$unset: {'oldfield': "" }}, false, true);
    }
});

ObjectId를 String으로 변환하십시오.

db.posts.find().forEach(function(doc){
     db.accounts.update({_id: doc._id}, {$set: {'_id': doc._id.str }}, false, true);
});

필드 값을 숫자에서 문자열로 변환

var newvalue = "";
db.posts.find().forEach(function(doc){
     if(doc.foo){
         newvalue = '"' + doc.foo + '"';
         db.accounts.update({_id: doc._id}, {$set: {'doc.foo': newvalue}});
     }
});

필드 값을 문자열에서 숫자로 변환

var newvalue = null;
db.posts.find().forEach(function(doc){
     if(doc.foo){
         newvalue = '"' + doc.foo + '"';
         db.accounts.update({_id: doc._id}, {$set: {'doc.foo': newvalue}});
     }
});

_id 필드의 ObjectID에서 타임 스탬프 만들기

db.posts.find().forEach(function(doc){
    if(doc._id){
        db.posts.update({_id: doc._id}, {$set:{ timestamp: new Date(parseInt(doc._id.str.slice(0,8), 16) *1000) }}, false, true);
    }
});

Date 객체에서 ObjectID 만들기

var timestamp = Math.floor(new Date(1974, 6, 25).getTime() / 1000);
var hex       = ('00000000' + timestamp.toString(16)).substr(-8); // zero padding
var objectId  = new ObjectId(hex + new ObjectId().str.substring(8));

배열에 항목이있는 모든 레코드 찾기

여기서 뭘하는지는 점 표기법을 사용하여 배열 인덱스를 참조하는 것입니다.

db.posts.find({"tags.0": {$exists: true }})


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow