MongoDB如何在数组字段插入对象后仅返回插入的对象
实现仅返回MongoDB数组中新增的对象
当然可行!我来帮你调整代码实现这个需求。
问题分析
你当前的代码返回整个文档,是因为没有指定投影规则——MongoDB默认会返回完整的更新后文档。我们可以利用数组操作符$slice来获取matches数组的最后一个元素(也就是你刚新增的对象),再配合正确的返回文档选项来达成目的。
修改后的代码
const player = { firstParticipant: { address: '74125', battlesWon: 0 }, secondParticipant: { address: '963258', battlesWon: 0 }, }; const result = await this.tournamentModel.findOneAndUpdate( { _id: '25113', status: 'OPEN' }, { $addToSet: { 'rounds.matches': player } }, { returnDocument: 'after', // 替代returnOriginal: false,是MongoDB 4.2+推荐的写法 projection: { 'rounds.matches': { $slice: -1 } } // 只返回matches数组的最后一项 } ); // 提取出新增的匹配对象 const newMatch = result?.rounds?.matches[0];
关键说明
returnDocument: 'after':确保返回更新后的文档状态,和returnOriginal: false功能一致,但写法更清晰规范。projection: { 'rounds.matches': { $slice: -1 } }:$slice: -1表示取数组的最后一个元素,正好对应你刚添加的对象。- 如果你不需要避免重复添加(
$addToSet会过滤重复元素),可以把$addToSet换成$push,这样每次都会往数组里新增对象。
内容的提问来源于stack exchange,提问作者Daywison Ferreira Leal
相关产品推荐
相关产品推荐

