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