【问题标题】:Query the nested documents inside mongodb arrays查询 mongodb 数组中的嵌套文档
【发布时间】:2019-10-09 02:01:31
【问题描述】:

更新 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_id=xxxx,

certificates.details.detail_id=xxxx

我有完整的数组,它将替换细节数组的第零位。如何做到这一点?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案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 实例的字段,但我没有修改 Bars 列表。

    【讨论】:

      猜你喜欢
      • 2018-03-09
      • 1970-01-01
      • 2019-02-20
      • 2021-02-25
      • 2016-08-16
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多