mongo-ruby-driver не будет создавать новый документ в upsert при наличии пользовательского _id - PullRequest
3 голосов
/ 15 февраля 2012

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

id = "#{params[:id]}:#{Time.now.strftime("%y%m%d")}"
# db.collection('metrics').insert({'_id' => id})
db.collection('metrics').update(
  { '_id' => id },
  { '$inc' => { "hits" => 1 } },
  { 'upsert' => true }
)

Сейчас это будет обновлять только существующие документы, а не создавать их, если они еще не существуют. Единственный способ выполнить оба действия, если я раскомментирую над ним команду insert ().

Если я использую консоль mongo и пытаюсь сделать это напрямую (без необходимости вставки ()), она будет работать как положено.

1 Ответ

10 голосов
/ 16 февраля 2012

Вы должны использовать символ вместо строки в параметрах.Этот код работает.

db.collection('metrics').update(
  { '_id' => id },
  { '$inc' => { "hits" => 1 } },
  { :upsert => true }
)

На самом деле, вы можете использовать символы практически везде.Это также работает:

db.collection(:metrics).update(
  { :_id => id },
  { :$inc => { :hits => 1 } },
  { :upsert => true }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...