Ricerca…


Osservazioni

Spesso è necessario eseguire script di manutenzione sul database. I campi vengono rinominati; le strutture dati vengono cambiate; le funzioni utilizzate per il supporto vengono rimosse; i servizi vengono migrati. L'elenco dei motivi per cui potresti voler cambiare lo schema è abbastanza illimitato. Quindi, il 'perché' è abbastanza auto esplicativo.

Il "come" è un po 'più sconosciuto. Per coloro che sono abituati alle funzioni SQL, gli script del database di cui sopra sembreranno strani. Ma notate come sono tutti in javascript e come stanno usando la stessa API che usiamo in Meteor, sia sul server che sul client. Abbiamo un'API coerente attraverso il nostro database, server e client.

Esegui i comandi di migrazione dello schema dalla shell mongo di meteor:

# run meteor
meteor

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

Aggiungi campo versione a tutti i record in una raccolta

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

Rimuovi matrice da tutti i record in una raccolta

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

Rinomina raccolta

db.originalName.renameCollection("newName" );

Trova campo contenente una stringa specifica

Con il potere della regex derivano grandi responsabilità ....

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

Crea un nuovo campo dal vecchio

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

Estrarre gli oggetti da una matrice e inserirli in un nuovo campo

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 registra da una raccolta in un'altra raccolta (ad esempio Rimuovi unione e appiattisci)

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

Sicuramente esiste un campo

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

Assicurarsi che il campo abbia un valore specifico

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

Rimuovi record se il campo specifico è un valore specifico

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

Cambia il valore specifico del campo con un nuovo valore

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

Disattivare il campo specifico su 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);
    }
});

Converti ObjectId in stringa

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

Converti valori di campo da numeri a stringhe

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

Converti valori di campo da stringhe a numeri

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

Crea un Timestamp da un ObjectID nel campo _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);
    }
});

Creare un ObjectID da un oggetto 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));

Trova tutti i record che hanno elementi in una matrice

Quello che stiamo facendo qui è fare riferimento all'indice dell'array usando la notazione a punti

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow