>

Mongo db를 업데이트 할 때 여러 개의 중첩 배열 내부의 문서를 업데이트하고 싶습니다. 그러나 업데이트하려고 할 때 내 쿼리 중 아무것도 작동하지 않았습니다. 아래는 기존 테이블입니다 :

    Array
   (
   [0] => Array
        (
            [_id] => MongoId Object
                (
                    [$id] => 5ce268ef6803fa8f237b23c6
                )

        [member_number] => 26b091bdd3f9505b2103a187f3ac6643
        [member_forename] => 1d40521662cc484d7c06992c61303ba6
        [member_surname] => 581c78bf6fe11cc0ff53a805a100d441

        [certificates] => Array
            (
                [0] => Array
                    (
                        [member_id] => MongoId Object
                            (
                                [$id] => 5ce268ef6803fa8f237b23c6
                            )
                        [certificate_id] => MongoId Object
                            (
                                [$id] => 5ce4dd3d6803fa15454cbed5
                            )
                        [skills_completed] => N
                        [certificate_issued] => N
                        [details] => Array
                            (
                                [0] => Array
                                    (
                                        [member_id] => MongoId Object
                                            (
                                                [$id] => 5ce268ef6803fa8f237b23c6
                                            )
                                        [session_id] => MongoId Object
                                            (
                                                [$id] => 5ce4f1a96803fa574e4cbede
                                            )
                                        [mark_status] => A
                                        [cd_status] => A
                                        [gradeId] => MongoId Object
                                            (
                                                [$id] => 5ca48ccfa36f74db9a8a0620
                                            )
                                        [gradeKey] => NP
                                        [achieved_date] => MongoDate Object
                                            (
                                                [sec] => 1558531565
                                                [usec] => 713000
                                            )
                                        [detail_id] => MongoId Object
                                            (
                                                [$id] => 5ce4dd526803fa1f454cbed7
                                            )
                                        [marked_by] => MongoId Object
                                            (
                                                [$id] => 5cb5622a6803fa640b7b23c7
                                            )
                                    )
                            )
                        [certificate_issued_by] => 
                        [certificate_session_id] => 
                        [sc_date] => 
                    )


        [updated_at] => MongoDate Object
            (
                [sec] => 1558341930
                [usec] => 482000
            )
    )

)

인증서 내에 중첩 된 세부 정보 섹션 중 하나를 업데이트하고 싶습니다. 인증서 배열은 멤버 테이블 내에 있습니다.

일치하는 조건은 _id = member id입니다. certificate.certificate_id = xxxx,

certificates.details.detail_id = xxxx

세부 정보의 0 번째 위치를 대체 할 전체 배열이 있습니다. 어떻게해야합니까?

  • 답변 # 1

    Mongoid가 작업을 수행하도록 내재 된 연관성이 있다고 가정하면 다음과 같이 간단합니다.

    class Foo
      include Mongoid::Document
      embeds_many :bars
    end
    class Bar
      include Mongoid::Document
      has_one :thing
      embedded_in :foo
    end
    class Thing
      include Mongoid::Document
      belongs_to :bar
    end
    foo = Foo.new
    foo.bars = [Bar.new, Bar.new]
    foo.save!
    foo.bars[0].thing = Thing.new
    foo.save!
    foo.reload
    foo.bars.map(&:thing)
    # => [#<Thing _id: 5ce85f47026d7c20c4c0613a, bar_id: BSON::ObjectId('5ce85f47026d7c20c4c06138')>, nil]
    
    

    https://jira.mongodb.org/browse/MONGOID-2951을 기록해 두십시오. 위의 예에서 Bar 인스턴스 중 하나의 필드를 변경했지만 Bar 목록을 수정하지 않았습니다.

관련 자료

  • 이전 Java의 객체에 대한 포인터 목록이있는 객체 유형의 ArrayList를 가질 수 있습니까?
  • 다음 regex - 텍스트 블록 단축