推送到子数组的最后一个元素

时间:2019-03-23 18:41:02

标签: mongodb

我的文档如下:

{
  _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
}

但是当然不行,蒙哥抱怨

  

$ push中$ each的参数必须是一个数组,但类型为:对象

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

0 个答案:

没有答案