我的目的是将数组推入嵌套在内部的索引'jnl_articles'中,如何使用原始mongodb查询实现它。我正在使用带有laravel框架的Jessengers mongoDB。下面给出的是我的mongoDb文档。
{
"_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
}
]
我需要获得的期望结果如下。更新完成后,这应该是我的mongodb文档。请建议使用mongoDB raw或jessengers mongodb查询以实现此结果。
{
"_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"
},
]
}
]
}
答案 0 :(得分:1)
假设您希望将文章推送至第一卷的第一期,则如下所示:
{ $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 -------------------------------------/
答案 1 :(得分:1)
尝试一下:
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 } });
}