sql >> データベース >  >> NoSQL >> MongoDB

$ arrayElemAtを使用して、MongoDB $ Projectionのその要素からフィールドを削除するにはどうすればよいですか?

    これは、arrayElemAt の構文に基づいています。

    つまり、配列要素を好きなように作成できます。あなたの場合、あなたは名前だけが欲しいです。したがって、これは機能するはずです:

    [{
      $match: {
        jobCategoryId: mongoose.Types.ObjectId(jobCategoryId)
      }
    }, {  
      $lookup: {  
        from: 'users',
        localField: 'userId',
        foreignField: '_id',
        as: 'user'
      }
    }, {  
      $project: {  
        _id: 1,
        description: 1,
        title: 1,
        user: {  
          name: {
            $arrayElemAt: ["$user.name", 0]
          }
        }
      }
    }]
    

    更新のフォローアップnameの上にプロパティを追加する方法を尋ねられました 。プロジェクトは次のとおりです:

    {  
      $project: {  
        _id: 1,
        description: 1,
        title: 1,
        user: {  
          name: {  
            $arrayElemAt: ["$user.name", 0]
          },
          email: {  
            $arrayElemAt: ["$user.email", 0]
          }
        }
      }
    }
    

    2回目のフォローアップ Drag0がコメントで尋ねたように:結果がuser:[]オブジェクトuser:{}の代わりにサイズ1の配列を生成するために上記が十分でない場合は、以下を使用できます。

    {  
      $project: {
        _id: 1,
        description: 1,
        title: 1,
        user: {
          $let: {
            vars: {
              firstUser: {
                $arrayElemAt: ["$user", 0]
              }
            },
            in: {
              name: "$$firstUser.name",
              email: "$$firstUser.email"
            }
          }
        }
      }
    }
    



    1. MongoDBからNode.JsにJSONツリーを作成します

    2. カスタム検証と事前保存フックのためのMongoEngineDocumentクラスメソッドの使用

    3. Dockerを使用してRedisでSpringBootWebアプリを構成する方法

    4. ノードでmongodbクライアントfindOne()を並べ替える