Как эффективно выполнить массовую вставку и обновление значений документа mongodb из массива? - PullRequest
0 голосов
/ 18 января 2012

У меня есть коллекция тегов, которая содержит документы следующей структуры:

{
  word:"movie", //tag word
  count:1        //count of times tag word has been used
}

Мне дан массив новых тегов, которые необходимо добавить / обновить в коллекции тегов:

["music","movie","book"]

Я могу обновить счетчики всех тегов, которые в настоящее время существуют в коллекции тегов, используя следующий запрос:

db.Tags.update({word:{$in:["music","movies","books"]}}, {$inc:{count:1}}), true, true);

Хотя это эффективная стратегия обновления, я не могу увидеть, какие значения тегов не были найдены в коллекции, и установка флага upsert в значение true не создала новые документы для необнаруженных тегов.

Вот где я застрял, как мне обработать массовую вставку "новых" значений в коллекцию тегов? Есть ли другой способ, с помощью которого я мог бы лучше использовать обновление, чтобы оно поддерживало новые значения тегов?

(Примечание: я использую Node.js с mongoose, решения с использованием mongoose / node-mongo-native были бы хорошими, но не обязательными)

Спасибо, впереди

1 Ответ

1 голос
/ 18 января 2012

Концепция одновременного использования upsert и оператора $in неуместна. Это просто не будет работать, так как между upsert if *any* in и upsert if *none* in.

нет никакого различия

В этом случае MongoDB делает версию, которую вы не хотите делать. Но вы не можете заставить это изменить поведение.

Я бы предложил просто выполнить три последовательных записи, просматривая массив тегов. Я знаю, что это раздражает и имеет неприятный запах кода, но так работает MongoDB.

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