【问题标题】:How to insert document or fields in nested documents in mongo如何在mongo的嵌套文档中插入文档或字段
【发布时间】:2019-06-09 02:54:15
【问题描述】:

我想要集合命名系统,其中有一个名为 sub_systems 的文档,在其下有三个名为 high mid & low 的文档。并且每个高、中、低都包含单独的多个文档如下所示

systems: {
           sub_system_1 : {
                            high :{ {task1},
                                    {task2},
                                    .......
                                  },                                
                            mid  :{ {task1},
                                    {task2},
                                    .......
                                  },
                            low :{ {task1},
                                    {task2},
                                    .......
                                  },
                          },
           sub_system_2 : {
                            high :{ {task1},
                                    {task2},
                                    .......
                                  },                                
                            mid  :{ {task1},
                                    {task2},
                                    .......
                                  },
                            low :{ {task1},
                                    {task2},
                                    .......
                                  },
                          },
           ............
         }

以下是我遇到的问题 1.我将如何创建这样的嵌套文档。 2. 如何在系统集合中插入新的 sub_system。 3. 如何在 sub_system 文件下插入新的优先级(高、中、低)。 4. 如何在特定子系统和特定优先级(高、低、中)文档下插入新任务

我想知道这个使用 mongo shell 和 perl mongodb

【问题讨论】:

    标签: mongodb perl mongodb-query


    【解决方案1】:

    使用外壳

    1.如何创建这样的嵌套文档

    db.systems.insert( [{"name": "sub_system_1", "data" : {"high" :["task1","task2"], "mid": ["task1","task2"], "low" : ["task1","task2"]}},{"name": "sub_system_2" ,"data": {"high" :["task1","task2"], "mid": ["task1","task2"], "low" : ["task1","task2"]}}])
    

    2.如何在系统集合中插入新的子系统

    db.systems.insert( {"name": "sub_system_3", "data" : {"high" :["task1","task2"], "mid": ["task1","task2"], "low" : ["task1","task2"]}})
    

    3.如何在子系统文档下插入新的优先级(高、中、低)

    // First you need to find the document using the name field
    var sub_system_1 = db.systems.findOne({"name":"sub_system_1"})
    // set your new priority
    sub_system_1.data.new_priority = [ "task1", "task2" ]
    // Save updated document 
    db.systems.save(sub_system_1)
    

    您还可以使用 updateOne 调用在一个语句中进行更新,请参阅以下文档 https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/#db.collection.updateOne

    4.如何在特定子系统和特定优先级(高、低、中)文档下插入新任务

    // First you need to find the document using the name field
    var sub_system_1 = db.systems.findOne({"name":"sub_system_1"})
    // Now we add a new task to priority low
    sub_system_1.data.low[sub_system_1.data.low.length] = "task3"
    // Save updated document 
    db.systems.save(sub_system_1)
    

    使用 perl mongodb

    #!/usr/bin/perl
    
    use MongoDB::Connection;
    
    my $mongodb_dbhost = 'mongodb.co.za';
    my $mongodb_dbname = 'systems_production';
    my $mongodb_dbtable = 'systems';
    
    my $connection   =  MongoDB::Connection->new(host => $mongodb_dbhost);
    
    my $collection = $connection->$mongodb_dbname->$mongodb_dbtable;
    

    1。我将如何创建这样的嵌套文档

    my $data = $collection->insert( [
        {
           "name": "sub_system_1", "data" : {"high" :["task1","task2"], "mid":     ["task1","task2"], "low" : ["task1","task2"]}
    },
    {
        "name": "sub_system_2" ,"data": {"high" :["task1","task2"], "mid":    ["task1","task2"], "low" : ["task1","task2"]}
    }
      ]); 
    

    2。我将如何在系统集合中插入新的 sub_system

      $data = $collection->insert({
          "name": "sub_system_3", 
       "data" : {"high" :["task1","task2"], "mid": ["task1","task2"], "low" :     ["task1","task2"]}
      });
    

    3。如何在 sub_system 文档下插入新的优先级(高、中、低)

    my $sub_system_1 = $connection->$mongodb_dbname->$mongodb_dbtable->find_one({'name' => 'sub_system_1'});
    $sub_system_1->{data}->{new_priority} = [ "task1", "task2" ];
    $collection->save($sub_system_1);
    

    4。如何在特定子系统和特定优先级(高、低、中)文档下插入新任务

    my $sub_system_1 = $connection->$mongodb_dbname->$mongodb_dbtable->find_one({'name' => 'sub_system_1'});
     $sub_system_1->{data}->{low}->[scalar(@$sub_system_1->{data}->{low})] = "task3";
     $collection->save($sub_system_1);
    

    【讨论】:

    • 您在 high、mid 和 low 中创建了数组,而不是与我要求的完全相反的文档
    • 您好,看看您的示例,您不能有一个没有键的任务哈希列表,这些任务需要成为您想要分配的任何值的键,例如 db.systems.insert( {"name": "sub_system_3", "data" : {"high" :{"task1": "some value","task2": "some other value"}, "mid": {"task1": "some value","task2": "some other value"}, "low" : {"task1": "some value","task2": "some other value"}}})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2011-11-04
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多