Обновление Mongodb с upsert и мульти синтаксисом
Я новичок в mongodb и так устал от mongodb 'Неполная документация оставляет меня для проб и ошибок ... к сожалению, все мои попытки не работают без ошибок, оставляя меня в замешательстве о том, что происходит и что нужно отлаживать ...
Мне просто нужно обновить несколько записей в базе данных, соответствующих определенным критериям, и для несуществующих записей создать новые записи для этого. Я считаю, что я могу сделать это с помощью единого доступа к базе данных с обновлениями, upsert и multi. Вот'что ямы придумали: я
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } } );
Мы также пробовали несколько комбинаций или даже старую версию, такую как:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true } );
ни один из них не работает ...
Пожалуйста, помогите мне с этим таким тривиальным делом ... Я могу легко сделать это в SQL, но Nosql вещь ограничивает меня .. Спасибо!
РЕДАКТИРОВАТЬ:
Тот же запрос на поиск работает отлично:
dbschema.Person.find( { person_id: { $in: ["734533604" ,"701084015"] } }, function ( err, results ) {
console.log( 'result: ' + results );
console.log( 'error: ' + err );
console.log( 'result length: ' + results.length );
} );
РЕДАКТИРОВАТЬ:
Я ожидаюне найдено" запись, которая будет создана, и найденная запись, которая будет обновлена. моя логика может быть испорчена, и я теперь так растерялся.
Первоначально я находил () - по одной записи за раз, менял значение и вызывал save () для каждой измененной записи, но при развертывании в режиме реального времени время отклика становится в сотни раз медленнее, особенно когдаНесколько сотен записей, которые будут обновляться при каждом запросе.
Затем я обнаружил find () + $ in, и производительность восстановилась и даже лучше, чем предыдущая (при запросе), но обновление все еще неприемлемо медленное. Поэтому сейчас я ищу способы обновить все документы за один запрос. ,
то, что я обычно делаю в SQL, использует ОБНОВЛЕНИЕ, КОГДА ДЕЛА ... например:
UPDATE person SET score = CASE
WHEN person_id = "734533604" THEN 1200
WHEN person_id = "701084015" THEN 1200
ELSE
score
END