3

フィールドの JSON/ハッシュを使用して mongodb コレクションにアップサートすることはできますが、_idObjectId フィールドを使用する代わりに、次のような別のインデックス付きフィールドを使用できますexternal_idか?

毎日フィードから受信するいくつかのアイテムを更新するためにそれを使用しています。そのため、フィード アイテムには内部 ID が含まれていません。

4

1 に答える 1

1

はい、MongoidでカスタムIDを使用してアップサートすることは可能ですが、2012年6月27日頃の3.0.0.rcでのみ可能です。

app / models / item.rb

class Item
  include Mongoid::Document

  field :external_id, type: String
  field :_id, type: String, default: ->{ external_id }
  field :text, type: String
end

test / unit / item_test.rb

require 'test_helper'

class ItemTest < ActiveSupport::TestCase
  def setup
    Item.delete_all
  end

  test "external id" do
    Item.new( text: 'Lorem ipsum' ).upsert
    Item.new( external_id: 'an external id', text: 'dolor sit amet' ).upsert
    puts Item.all.to_a.collect{|item|item.inspect}
  end
end

出力

実行オプション:-name = test_external_id

# Running tests:

#<Item _id: 4ff202501f98ce8202c03268, _type: nil, external_id: nil, text: "Lorem ipsum">
#<Item _id: an external id, _type: nil, external_id: "an external id", text: "dolor sit amet">
.

Finished tests in 0.028232s, 35.4208 tests/s, 0.0000 assertions/s.

1 tests, 0 assertions, 0 failures, 0 errors, 0 skips

これを行うには、githubからインストールし、にアクセスしてクローンを作成する必要があります。

https://github.com/mongoid/mongoid

bundle install
bundle exec rake install

これを可能にするコミットへのリンクは次のとおりです。

https://github.com/mongoid/mongoid/commit/3062363bad3ab947d7689502d6805652b20e89a0
于 2012-07-02T20:21:46.543 に答える