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