代码之家  ›  专栏  ›  技术社区  ›  SuleymanSah

基于嵌套数组对象添加新字段

  •  0
  • SuleymanSah  · 技术社区  · 3 年前

    我有一个带有嵌套对象数组的集合,如果嵌套对象数组是否包含项,我想向文档添加一个新的布尔字段。

    我可以通过在两个单独的addFields聚合中使用map和in运算符来解决这个问题,但是 我想知道是否有更清洁、更智能的解决方案。

    示例文档:

    [
      {
        "_id": "630875a5d0d70edb88e19a7b",
        "favorites": [
          {
            "_id": "6309ef9e538eef79c9e53827",
            "user": "6304d72e213e817ee090eb93",
            "recipe": "630875a5d0d70edb88e19a7b"
          },
          {
            "_id": "630f1b5a8f00dfa9a7a5006c",
            "user": "63066ce10722fdb443efb1f6",
            "recipe": "630875a5d0d70edb88e19a7b"
          }
        ]
      }
    ]
    

    我的解决方案是:

    db.collection.aggregate([
      {
        $addFields: {
          favoritedUserIds: {
            $map: {
              input: "$favorites",
              as: "favorited",
              in: "$$favorited.user"
            }
          }
        }
      },
      {
        $addFields: {
          isFavorited: {
            $in: [
              "6304d72e213e817ee090eb93", // user id
              "$favoritedUserIds"
            ]
          }
        }
      },
      {
        "$unset": "favoritedUserIds"
      }
    ])
    

    Mongo Playground

    1 回复  |  直到 3 年前
        1
  •  2
  •   Yong Shun    3 年前

    您只需检查参数是否在 favorites.user 大堆

    db.collection.aggregate([
      {
        $addFields: {
          isFavorited: {
            $in: [
              "6304d72e213e817ee090eb93",
              "$favorites.user"
            ]
          }
        }
      }
    ])
    

    Demo @ Mongo Playground

    推荐文章