首页 > 解决方案 > 推送到子数组的最后一个元素

问题描述

我的文档如下所示:

{
  _id: ...
  checkins: [
    {...}
    {...}
    {
      ...
      activities: [
        {...}
        {...}
      ]
    }
  ]
}

如果我想推入checkins数组的第一个元素,我可以这样做:

mycol.updateOne(
            {'_id': ...},
            {'$push': {
                'checkins.0.activities': entry}}
        )

但是我需要插入entry到 checkins 数组的最后一个索引中,那么我怎么能实现这样的东西呢?

mycol.updateOne(
            {'_id': ...},
            {'$push': {
                'checkins.-1.activities': entry}}
        )

编辑:

我不能这样做:

'$set': {'checkins.-1': <entry>}

因为它会覆盖数组中的其他元素,并且:

'$set': {'checkins.-1': [...otherEntries, entry]}

意味着每次都插入整个数组,因为它是非常大的数组,所以太贵了

不过,正如建议的那样,这看起来很有希望:

{
  $each: [ entry ],
  $position: -1
}

但这只是让我推入checkins数组,如果我想向activities子数组添加一个元素,它将涉及插入整个数组,就像第一个解决方案一样。在这种情况下,我正在寻找这样的东西:

{
  $each: { '$push': {'activities': entry} },
  $position: -1
}

但是当然它不起作用,mongo抱怨说

$push 中 $each 的参数必须是一个数组,但它的类型是:object

我如何推入最后一个元素,即进入checkins.-1.activities

标签: mongodb

解决方案


推荐阅读