You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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];

关键说明

  1. returnDocument: 'after':确保返回更新后的文档状态,和returnOriginal: false功能一致,但写法更清晰规范。
  2. projection: { 'rounds.matches': { $slice: -1 } }:$slice: -1表示取数组的最后一个元素,正好对应你刚添加的对象。
  3. 如果你不需要避免重复添加($addToSet会过滤重复元素),可以把$addToSet换成$push,这样每次都会往数组里新增对象。

内容的提问来源于stack exchange,提问作者Daywison Ferreira Leal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:02:29