MongoDB:在没有$unwind的嵌入式文档数组中的字段比较



>假设我有一个文档,其中包含具有相同结构的嵌入式文档数组:

{
    "_id": ObjectId('5c41c2a3c3238118a0950a7b'),
    "subdocuments": [
        {
            "_id": ObjectId('5c41c2b4c3238118a0950a7c'),
            "field1: "A",
            "field2: "A"
        },
        {
            "_id": ObjectId('5c41c2b6c3238118a0950a7d'),
            "field1: "B",
            "field2: "C"
        }
    ]
}

我想在同一子文档中比较field1field2,并将结果投影到该子文档中,即:

{
    "_id": ObjectId('5c41c2a3c3238118a0950a7b'),
    "subdocuments": [
        {
            "_id": ObjectId('5c41c2b4c3238118a0950a7c'),
            "field1: "A",
            "field2: "A",
            "fields_equal": true
        },
        {
            "_id": ObjectId('5c41c2b6c3238118a0950a7d'),
            "field1: "B",
            "field2: "C",
            "fields_equal": false
        }
    ]
}

我想这样做而不需要放松subdocuments.这不起作用:

'$addFields': {
    'subdocuments.fields_equal': {
        '$eq': ['$subdocuments.field1','$subdocuments.field2']
    }
}

关于如何做到这一点的任何想法?或者即使有可能?

运行此聚合。

db.collection.aggregate([{
  '$addFields': {
    'subdocuments': {
      $map: {
        input: "$subdocuments",
        in: {
          $mergeObjects: [{
              fields_equal: { $eq: ["$$this.field1", "$$this.field2"] }
            },
            "$$this"
          ]
        }
      }
    }
  }
}])
db.collection.aggregate(
    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$subdocuments",
            }
        },
        // Stage 2
        {
            $addFields: {
                "subdocuments.fields_equal": {
                    $cond: {
                        if: {
                            $eq: ["$subdocuments.field1", "$subdocuments.field2"]
                        },
                        then: true,
                        else: false
                    }
                }
            }
        },
        // Stage 3
        {
            $group: {
                _id: '$_id',
                subdocuments: {
                    $addToSet: '$subdocuments'
                }
            }
        },
    ]

);

最新更新