node + mongodb:更新嵌套数组中的最后一个对象

时间:2017-11-12 04:22:14

标签: node.js mongodb

我的mongodb系列看起来像这样

{
   channelId: int,
   channelName: string,
   voteHistory: [
       {
           createdAt: date,
           votes: ['old vote','old vote','old vote']
       },
       {
           createdAt: date,
           votes: ['old vote']
       },
       {
           createdAt: date,
           votes: []
       }
   ]
}
...

voteHistorycreatedAt(日期)升序排序。如果我想将对象推送到votes中最后一个(最近的)对象中的voteHistory数组,我将如何通过一个操作执行此操作?

结果应如下所示

{
   channelId: int,
   channelName: string,
   voteHistory: [
       {
           createdAt: date,
           votes: ['old vote','old vote','old vote']
       },
       {
           createdAt: date,
           votes: ['old vote']
       },
       {
           createdAt: date,
           votes: ['new vote!!']
       }
   ]
}

1 个答案:

答案 0 :(得分:0)

由于$ push和$ pull不能成为单一原子操作的一部分,我最简单的方法就是在2次操作中完成它

1 / findOne()甚至更好findById()

2 /修改内存中的数组=>保存您的文档

你可以通过组合切片,长度和推送算子在一个单一的操作中完成它,但说实话,我不确定效率。