【问题标题】:I need to push an array element into an inner element inside a mongo Db document我需要将数组元素推送到 mongo Db 文档中的内部元素中
【发布时间】:2019-09-01 15:08:20
【问题描述】:

我的意图是将数组推送到嵌套在内部深处的索引“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"
            }, 
        ]
    }
]

}

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案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 -------------------------------------/
    

    $push$each 的文档。

    【讨论】:

      【解决方案2】:

      试试这个:

      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 } });
      }
      

      【讨论】:

      • 欢迎来到 SO!感谢您的回答!请考虑添加有关此代码如何工作的一些细节,并格式化代码。
      • 如果要推送数组,请使用 $each 或循环数组,然后您可以推送一个对象。不使用 $each 方法。
      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 2012-09-28
      相关资源
      最近更新 更多