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

MongoDB技术问题:如何将$sample结果存入新增的seeAlso字段

解决方案

你可以通过聚合管道组合$match、$addFields和$lookup(配合内部的$sample)来实现需求,核心思路是先定位目标文档,再将同集合的随机样本数据注入到新增的seeAlso字段中,同时排除当前文档避免重复:

完整聚合管道示例

假设你的集合名为yourCollection,目标文档的_id为targetId,管道代码如下:

db.yourCollection.aggregate([
  // 匹配目标单条记录
  {
    $match: { _id: ObjectId("targetId") } // 替换为你的目标ID
  },
  // 新增seeAlso字段并填充随机样本
  {
    $addFields: {
      seeAlso: {
        $lookup: {
          from: "yourCollection", // 指定同集合名称
          pipeline: [
            // 排除当前文档,避免样本包含自身
            { $match: { _id: { $ne: "$_id" } } },
            // 随机抽取3条样本数据
            { $sample: { size: 3 } }
          ],
          as: "seeAlso"
        }
      }
    }
  }
])

关键逻辑说明

  • $match阶段精准定位你需要的目标文档,确保后续操作只针对这条记录。
  • $addFields用于给目标文档新增seeAlso字段,字段值由$lookup的返回结果填充。
  • $lookup的内部管道先通过$ne条件排除当前文档的_id,再用$sample抽取3条随机记录,最终将结果以数组形式存入seeAlso。

执行后返回的文档格式会符合你的要求:

{
  "_id": ObjectId("targetId"),
  "key1": "value1",
  "key2": "value2",
  "seeAlso": [
    { /* 随机样本文档1 */ },
    { /* 随机样本文档2 */ },
    { /* 随机样本文档3 */ }
  ]
}

内容的提问来源于stack exchange,提问作者Pedro Rabbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:05:32