Мне нужно вставить элемент массива во внутренний элемент внутри Dong-документа Монго - PullRequest
3 голосов
/ 11 апреля 2019

Мое намерение состоит в том, чтобы вставить массив в индекс 'jnl_articles', который вложен глубоко внутрь. Как я могу добиться этого с помощью необработанного запроса mongodb.Я использую Jessengers mongoDB с каркасом laravel.

Вот документ:

{
"_id" : ObjectId("5ca70c3c5586e920ba79df59"),
"jnl_volumes" : [
     {
        "volume_name" : 6,
        "jnl_issues" : [ 
            {
                "issue_name" : "1",
                "created_date" : "2019-04-10",
                "jnl_articles" : [],
                "issue_status" : "1"
            }, 
        ]
    }
]

}

Ниже приведен элемент массива, в который мне нужно нажать:

[
{
    "article_name": "art1",
    "created_date": "2019-04-10",
    "article_order": 1
},
{
    "article_name": "art2",
    "created_date": "2019-04-10",
    "article_order": 2
}

]

Желаемый результат, который мне нужно получить, приведен ниже.

  {
    "_id" : ObjectId("5ca70c3c5586e920ba79df59"),
    "jnl_volumes" : [
     {
        "volume_name" : 6,
        "jnl_issues" : [ 
            {
                "issue_name" : "1",
                "created_date" : "2019-04-10",
                "jnl_articles" : [ 
                    {
                        "article_name" : "art1",
                        "created_date" : "2019-04-10",
                        "article_order" : 1
                    }, 
                    {
                        "article_name" : "art2",
                        "created_date" : "2019-04-10",
                        "article_order" : 2
                    }
                ],
                "issue_status" : "1"
            }, 
        ]
    }
]

}

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Попробуйте это:

await table_name.update({
    _id: ObjectId("5ca70c3c5586e920ba79df59")
}, {
    $push: {
        jnl_articles: $each: [{
            object
        }, {
            object
        }]
    }
});

Или

for (const object of array) {
    await table_name.update(
    {_id: ObjectId("5ca70c3c5586e920ba79df59")},
    {$push: { jnl_articles: object } });
}
1 голос
/ 11 апреля 2019

Предполагая, что вы хотите отправить статьи к первому выпуску первого тома, это будет выглядеть так:

{ $push: { "jnl_volumes.0.jnl_issues.0.jnl_articles": { $each: [] } } }
// use first volume ----^            ^                  ^      ^
// use first issue ------------------/                  |      |
// use $each to append an array of elements ------------/      |
// your array of articles -------------------------------------/

Документация для $push и $each.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...