修改数组的最后一个元素
我有这样的对象结构:
{
name: "...",
pockets: [
{
cdate: "....",
items: [...]
}
...
]
}
在更新操作中,我想将一些记录添加到最后一个口袋项目的项目字段中。 使用点符号是我知道访问子文档的唯一方式,但我无法得到我想要的。 所以,我正在寻找这样的东西:
pockets.-1.items
pockets.$last.items
是否可以修改最后一个元素? 如果是,如何?
我不知道使用单行查询来做到这一点的方法。 但是你可以选择记录,更新并保存。
var query = <insert query here>;
var mydocs = db.mycollection.find(query);
for (var i=0 ; i<mydocs.length ; i++) {
mydocs[i].pockets[pockets.length-1].items.push('new item');
db.mycollection.save(mydoc);
}
我不相信有可能以原子的方式做到这一点。 有一个要求将这个功能添加到MongoDB中。
如果你可以在你的应用程序代码中确保线程安全,那么你可以使用从pockets数组中得到的一系列$ pop(将最后一个元素从pockets中移除)到变量p,然后使用$ addToSet到p.items,现在你可以使用$ push回到口袋里。 但是,如果您的应用程序无法确保只有一个进程可能同时执行此操作,则另一个进程可能会在这些步骤中修改该阵列,最终可能会丢失该更新。
您也可以在这里查看“更新如果当前”的语义,以查看您可以通过多线程问题解决可能的竞争的另一种方式。
链接地址: http://www.djcxy.com/p/59569.html