programing

Mongoid를 사용하는 대신 Ruby에서 MongoDB를 직접 쿼리하는 방법은 무엇입니까?

minimums 2023. 7. 2. 19:11
반응형

Mongoid를 사용하는 대신 Ruby에서 MongoDB를 직접 쿼리하는 방법은 무엇입니까?

MongoDB와 Mongoid를 사용하는 Rails 애플리케이션에 대한 마이그레이션을 작성합니다.현재 마이그레이션에서는 Mongoid를 사용하여 레코드를 쿼리하고 업데이트하는 모델을 사용하지만 성능은 이에 미치지 못합니다.저는 기본적으로 대규모 컬렉션의 모든 레코드를 업데이트하고 n+20개의 쿼리를 작성하고 있습니다.로컬에서 실행하는 데 한 시간이 걸린 후 마이그레이션을 종료했습니다(끝나지 않았습니다).저는 mongo에 대한 원시 쿼리를 너무 많은 노력 없이 실행할 수 있기를 원합니다.Mongoid가 이미 데이터베이스에 연결을 로드했기 때문에 Mongoid에서 Mongo 드라이버에 액세스할 수 있는 방법이 있을 것 같습니다.업데이트 쿼리를 직접 실행하기 위해 데이터베이스에 액세스하려면 어떻게 해야 합니까?

Mongoid 3를 사용하는 경우 MongoDB 드라이버에 쉽게 액세스할 수 있습니다.Moped. 다음은 모델을 사용하여 데이터에 액세스하지 않고 일부 원시 데이터에 액세스하는 예입니다.

db = Mongoid::Sessions.default

# inserting a new document
collection = db[:collection_name]
collection.insert(name: 'my new document')

# finding a document
doc = collection.find(name: 'my new document').first

# iterating over all documents in a collection
collection.find.each do |document|
  puts document.inspect
end

Mongoid 5의 경우:

db = Mongoid::Clients.default

collection = db[:collection_name]

이제 컬렉션에 대한 쿼리를 수행할 수 있습니다.

방법은 다음과 같습니다(이것은 2+ 및 3+에서도 작동할 것입니다)

모든 모델은 Mongoid를 포함하여 다음과 같은 동작을 보여줍니다.: 모든 모델 내의 문서를 기술적으로 각 문서가 mongoid를 통해 monogodb 또는 mongoodb-rouby 드라이버로 매핑됩니다.

그래서 만약 여러분들이 Like.

class PerformerSource 
  include Mongoid::Document
  ## Definition

end

이제 다음과 같은 드라이버(Moped 또는 Mongodb-ruby 드라이버)를 사용하여 Mongo Query를 실행할 수 있습니다.

PerformerSource.collection.insert("something")
## where something is json document you want to insert

이렇게 하면 해당 문서에 대해 모페드 연결(몽고이드 3을 사용하는 경우)이 제공됩니다.

당신은 또한 이것과 같은 것을 할 수 있습니다.

 Mongoid::Sessions.default.collections.find { |document| document.name == "performer_sources"}.insert("something")

mongo 쿼리에 대한 자세한 내용과 mopedu를 사용하는 사람들이 mongo 쿼리를 통해 내부적으로 쿼리가 수집되는 방법을 설명하는 쿼리의 섹션을 따를 수 있는 mongo 쿼리

이것이 도움이 되길 바랍니다.

Mongoid 6의 경우:

db = Mongoid::default_client
collection = db[:collection_name]

간단한 대답은 모페드입니다.이것은 Mongoid를 기반으로 하는 하위 레벨 API이며, 이미 Mongoid를 사용하는 경우 사용할 수 있습니다.Moped API는 원시 MongoDB 작업에 대한 얇은 래퍼입니다.여기에 있는 설명서: http://mongoid.org/en/moped/docs/driver.html 가 유용할 것입니다.

누구나 여기서 언급했듯이, 당신의 대답은 모페드입니다.다음은 루비 스크립트(simple file test.rb)에 대한 예입니다.

  1. mongoid.yml을 정의합니다(이 경우 localhost).
development:
  sessions:
    default:
      database: test_development
      hosts:
        - localhost:27017
      options:
  1. 로드 구성 및 테스트 수집 설정

    #!/usr/bin/envruby에는 'mongoid'가 필요합니다.

    mongoid.load!("path/to/file/mongoid.yml",:development) # : 개발은 mongoid.yml 첫 줄 환경 db = Mongoid::Sessions.default는 "수집 문서 수 :> #{db[:collection]를 입력합니다.find.count}"

만약 당신이 mongoid 5(5)를 사용한다면 저는 이것을 사용하는 것을 추천합니다.

Item.collection.update_one({_id:  BSON::ObjectId('55512b7070722d22d3050000')}, '$set' => { 'category_name': 'Test' })

비결은 BSON::Object입니다.ID. 단일 ID를 검색하려면 mongo 쿼리와 같습니다.

db.items.update({ '_id': ObjectId("55512b7070722d22d3050000") }, { $set: {'category_name': 'Test' } })

위는 쿼리의 mongo 버전입니다.루비 코드를 몽고 코드로 번역하는 것은 문서에서 찾기 어려운 부분이 몇 개 있기 때문에 어려운 부분이라는 것을 알게 되었습니다.

http://www.rubydoc.info/gems/mongo/Mongo%2FCollection%3Aupdate_one

언급URL : https://stackoverflow.com/questions/14816900/how-to-query-mongodb-directly-from-ruby-instead-of-using-mongoid

반응형