Suche…


Bemerkungen

Es ist häufig erforderlich, Wartungsskripts in Ihrer Datenbank auszuführen. Felder werden umbenannt; Datenstrukturen werden geändert; Funktionen, die Sie zur Unterstützung verwendet haben, werden entfernt. Dienste werden migriert. Die Liste der Gründe, aus denen Sie möglicherweise Ihr Schema ändern möchten, ist unbegrenzt. Das Warum ist also ziemlich selbsterklärend.

Das Wie ist ein bisschen unbekannter. Für die Personen, die an SQL-Funktionen gewöhnt sind, werden die oben genannten Datenbankskripts merkwürdig aussehen. Beachten Sie jedoch, wie sie alle in Javascript sind und wie sie dieselbe API verwenden, die wir in Meteor sowohl auf dem Server als auch auf dem Client verwenden. Wir haben eine konsistente API über unsere Datenbank, Server und Client.

Führen Sie die Schema-Migrationsbefehle über die Meteor-Mongo-Shell aus:

# run meteor
meteor

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

Versionsfeld zu allen Datensätzen in einer Sammlung hinzufügen

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

Entfernen Sie das Array aus allen Datensätzen in einer Sammlung

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);
    }
});

Sammlung umbenennen

db.originalName.renameCollection("newName" );

Feld suchen, das bestimmte Zeichenfolge enthält

Mit der Kraft des Regex kommt eine große Verantwortung ...

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

Neues Feld aus Alt erstellen

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

Ziehen Sie Objekte aus einem Array und platzieren Sie sie in einem neuen Feld

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);
    }
});

Blob-Datensatz aus einer Sammlung in eine andere Sammlung (z. B. Join & Flatten entfernen)

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);
    }
});

Stellen Sie sicher, dass das Feld vorhanden ist

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

Stellen Sie sicher, dass das Feld einen bestimmten Wert hat

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

Datensatz entfernen, wenn ein bestimmtes Feld ein bestimmter Wert ist

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

Ändern Sie den spezifischen Wert des Feldes in Neuer Wert

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

Spezifisches Feld auf Null setzen

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);
    }
});

Konvertieren Sie ObjectId in String

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

Konvertieren Sie Feldwerte von Zahlen in Strings

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

Konvertieren Sie Feldwerte von Strings in Zahlen

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}});
     }
});

Erstellen Sie einen Zeitstempel aus einer ObjectID im Feld _id

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);
    }
});

Erstellen Sie eine ObjectID aus einem Datumsobjekt

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));

Finden Sie alle Datensätze, die Elemente in einem Array enthalten

Was wir hier tun, referenziert den Array-Index mit Punktnotation

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow