2015-12-24 1 views
0

У меня есть миллионы документов в различной коллекции.Как хранить инкрементные данные в MongoDB?

Мое приложение периодически обновляет некоторые инкрементные данные MongoDB. Как это сделать?

Для каждой записи в инкрементальных данных, если запись существует, она должна быть обновлена ​​с новыми значениями, иначе она должна быть вставлена.

{ 
    _id: 'some ID', 
    lifnr: 12345, 
    bukrs: 3455, 
    amount: 500 
}, 
{ 
    _id: 'some ID', 
    lifnr: 12346, 
    bukrs: 3456, 
    amount: 5200 
} 

Предполагая, что это мои данные, с lifnr и bukrs как составной индекс с уникальным ограничением. Любые новые записи с {lifnr & bukrs} значением, аналогичным любому из существующих, должны заменить старую сумму. Если это новая запись уникального {lifnr & bukrs}, то он должен вставить/добавить его.

Подключите меня к подходу. Спасибо

+0

Дополнительная информация о том, какие данные и запросы (используемые операторы также используются) помогут – Sammaye

+1

Я могу упростить это или что-то вроде: 'db.col.update ({lifnr: doc.lifnr, bukrs: doc.bukrs }, doc, {upset: true}) 'достаточно? Это будет обновляться новыми значениями или вставить – Sammaye

+0

@Sammaye Не могли бы вы объяснить это? Я новичок в Монго! Кстати, разве это не «upsert»? Благодаря –

ответ

1

Основываясь на вашем редактировании, его не увеличивают данные. Его просто обновление с upsert установлено в true. Обновляйте каждый раз. Запрос плохо быть,

db.collection.update(
    { lifnr: 12345, bukrs: 3455}, 
    {$set: {amount: 5600}} 
    {upsert: true} 
) 

выше запрос будет обновлять сумму, если комбинация linfr & bukrs найдено. Если он не найден, он введет новый документ.

+0

Я четко упоминал как «инкрементные данные», а не как «приращение данных». Спасибо за ваш ответ, хотя! –

+0

Итак, после того, как вы попробовали свое решение для миллионов записей, я испытал большую задержку. Я перешел на массовый вызов. Он обновляется, но не вставляет. Код -> bulk.find (check_fields) .upsert(). Update ({"$ setOnInsert": whole_doc, "$ set": document}); –

+0

Массовое обновление - очень хорошая альтернатива для миллионов записей –

 Смежные вопросы

  • Нет связанных вопросов^_^