サーチ…


備考

データベースでメンテナンススクリプトを実行する必要があることがよくあります。フィールドの名前が変更されます。データ構造が変更されます。サポートしていた機能が削除されました。サービスが移行されます。あなたのスキーマを変更したい理由のリストは無限です。だから、「なぜ」はかなり自明です。

「方法」は少し不慣れです。 SQL関数に慣れている人にとって、上記のデータベース・スクリプトは奇妙に見えます。しかし、それらがどのようにjavascriptになっているのか、どのAPIが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);
    }
});

1つのコレクションから別のコレクションへのレコード(つまり、結合の削除と展開)

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を文字列に変換する

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