Sembra che MonogoDB non supporti l'upsout di gruppo. È corretto?Aggiunta di batch Upsert a MongoDB.
In caso contrario, come procedere con l'aggiunta di batch upsert con l'API esistente che è la più efficiente? Il batch upsert ha senso per mongo db?
Sembra che MonogoDB non supporti l'upsout di gruppo. È corretto?Aggiunta di batch Upsert a MongoDB.
In caso contrario, come procedere con l'aggiunta di batch upsert con l'API esistente che è la più efficiente? Il batch upsert ha senso per mongo db?
C'è un'utilità chiamata mongoimport che ha un flag di upsert. Qualcosa come
mongoimport -c myitems -d mydb --upsert items.json
Questo potrebbe forse raggiungere quello che stai cercando?
Il default è di upsert basata su _id ma si può cambiare la situazione utilizzando il flag --upsertFields documentato qui
http://docs.mongodb.org/manual/reference/mongoimport/#cmdoption-mongoimport--upsertFields
Se si esegue l'aggiornamento a MongoDB 2.6 è possibile usufruire del new Bulk operations:
Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);
per C# MongoDB.Driver io uso successivo:
var writeModels = new List<WriteModel<T>>();
foreach (var entity in list)
{
var id = entity.Id;
if (id == null)
{
writeModels.Add(new InsertOneModel<T>(entity));
}
else
{
var filter = new ExpressionFilterDefinition<T>(x => x.Id == id);
var replaceModel = new ReplaceOneModel<T>(filter, entity);
writeModels.Add(replaceModel);
}
}
await getCollection().BulkWriteAsync(writeModels);
Cosa intendi esattamente per "batch upsert"? Aggiungendo documenti che non esistono ancora, mentre si aggiornano (sostituendo) oggetti già esistenti? – mnemosyn
sì ma come un lotto e NON uno per uno! simile al metodo di salvataggio che esegue l'upsert per un documento ma potrebbe fare un upsout per un batch di documenti – iCode
Questo thread fornisce assistenza: http://stackoverflow.com/questions/5143756/upsert-multiple -records-with-mongodb – Bill