如何在MongoDB中原子操作添加数组元素并设置虚拟顺序?
原子性在MongoDB数组中添加元素并设置顺序为数组长度
有没有人知道如何在MongoDB数组中添加一个元素,同时把它的“虚拟”顺序设为数组当前的大小,并且整个操作是原子性的?
示例代码如下:
db.users.updateOne( { _id: 1}, { $addToSet: { images: {name: 'new image', order: "size of the array"} } } )
我的目的是让最后添加的数组元素始终拥有最靠后的顺序。
更新1:操作前后数据示例
操作前的数据:
{ _id: 1, images: [ { name: 'some name', order: 0 } ] }
操作后期望得到的数据:
{ _id: 1, images: [ { name: 'some name', order: 0 }, { name: 'new image', order: 1 } ] }
更新2:原子性调整顺序的方法
如果有人感兴趣,我这里分享一个原子性更新元素顺序的实现方式(需要动态构建语句):
db.collection.update({ _id: 1 }, { $set: { "images.$[elem].order": 4, "images.$[elem2].order": 3 } }, { arrayFilters: [ { "elem.name": { $eq: "some name" } }, { "elem2.name": { $eq: "new image" } } ] })
感谢!
内容的提问来源于stack exchange,提问作者Dima
相关产品推荐
相关产品推荐

