NodeJS/Mongoose:将ObjectID插入数组头部
将ObjectID插入MongoDB数组头部的简便方法
嘿,我完全懂你不想用reverse()那种绕路方法的心情!其实MongoDB本身就提供了直接把元素插到数组头部的内置操作,根本不用把整个文档取出来折腾。
直接用$push操作符配合$position参数就可以搞定,一步到位:
Mongoose示例
如果你用的是Mongoose,更新语句可以这么写:
// 把新的Post._id插到posts数组的最前面 User.updateOne( { _id: 你的用户ID }, // 定位到目标用户文档 { $push: { posts: { $each: [Post._id], $position: 0 } } } );
原生MongoDB驱动示例
如果是用原生驱动,写法类似:
db.users.updateOne( { _id: 你的用户ID }, { $push: { posts: { $each: [ObjectId("新的帖子ID")], $position: 0 } } } );
关键参数说明
$each:用来指定要插入的元素列表(哪怕只有一个元素,也要用数组包起来)$position: 0:明确告诉MongoDB把元素插入到数组的第0位,也就是头部位置
这种方法的优势在于全程在数据库端完成操作,不需要把整个用户文档拉到应用层修改再存回去,不仅更高效,还能避免多请求并发修改时可能出现的冲突问题。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

