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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow