Szukaj…
Uwagi
Często konieczne jest uruchomienie skryptów konserwacyjnych w bazie danych. Zmieniono nazwę pól; struktury danych ulegają zmianie; funkcje używane do obsługi zostaną usunięte; usługi są migrowane. Lista powodów, dla których warto zmienić schemat, jest dość nieograniczona. Zatem „dlaczego” jest dość oczywiste.
„Jak” jest trochę bardziej nieznane. Dla osób przyzwyczajonych do funkcji SQL powyższe skrypty bazy danych będą wyglądać dziwnie. Zauważ jednak, że wszystkie są w javascript i jak korzystają z tego samego interfejsu API, którego używamy w Meteor, zarówno na serwerze, jak i na kliencie. Mamy spójny interfejs API za pośrednictwem naszej bazy danych, serwera i klienta.
Uruchom polecenia migracji schematu z powłoki Meteor Mongo:
# run meteor
meteor
# access the database shell in a second terminal window
meteor mongo
Dodaj pole wersji do wszystkich rekordów w kolekcji
db.posts.find().forEach(function(doc){
db.posts.update({_id: doc._id}, {$set:{'version':'v1.0'}}, false, true);
});
Usuń tablicę ze wszystkich rekordów w kolekcji
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);
}
});
Zmień nazwę kolekcji
db.originalName.renameCollection("newName" );
Znajdź pole zawierające określony ciąg
Z mocą wyrażeń regularnych wiąże się wielka odpowiedzialność ....
db.posts.find({'text': /.*foo.*|.*bar.*/i})
Utwórz nowe pole ze starego
db.posts.find().forEach(function(doc){
if(doc.oldField){
db.posts.update({_id: doc._id}, {$set:{'newField':doc.oldField}}, false, true);
}
});
Wyciągnij obiekty z tablicy i umieść w nowym polu
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);
}
});
Nagraj obiekt Blob z jednej kolekcji do innej kolekcji (tj. Usuń dołącz i spłaszcz)
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);
}
});
Upewnij się, że pole istnieje
db.posts.find().forEach(function(doc){
if(!doc.foo){
db.posts.update({_id: doc._id}, {$set:{'foo':''}}, false, true);
}
});
Upewnij się, że pole ma określoną wartość
db.posts.find().forEach(function(doc){
if(!doc.foo){
db.posts.update({_id: doc._id}, {$set:{'foo':'bar'}}, false, true);
}
});
Usuń rekord, jeśli określone pole ma określoną wartość
db.posts.find().forEach(function(doc){
if(doc.foo === 'bar'){
db.posts.remove({_id: doc._id});
}
});
Zmień określoną wartość pola na nową wartość
db.posts.find().forEach(function(doc){
if(doc.foo === 'bar'){
db.posts.update({_id: doc._id}, {$set:{'foo':'squee'}}, false, true);
}
});
Odznacz pole specyficzne na zero
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);
}
});
Konwertuj ObjectId na String
db.posts.find().forEach(function(doc){
db.accounts.update({_id: doc._id}, {$set: {'_id': doc._id.str }}, false, true);
});
Konwertuj wartości pól z liczb na ciągi
var newvalue = "";
db.posts.find().forEach(function(doc){
if(doc.foo){
newvalue = '"' + doc.foo + '"';
db.accounts.update({_id: doc._id}, {$set: {'doc.foo': newvalue}});
}
});
Konwertuj wartości pól z ciągów na liczby
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}});
}
});
Utwórz znacznik czasu na podstawie ObjectID w polu _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);
}
});
Utwórz ObjectID z obiektu Date
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));
Znajdź wszystkie rekordy zawierające elementy w tablicy
To, co tu robimy, polega na odwoływaniu się do indeksu tablicy za pomocą notacji kropkowej
db.posts.find({"tags.0": {$exists: true }})