ホーム>source

これはMongoDB用です

ドキュメントに Employee と言う以下のように:

<前>ウィズウィズ

これは、アドレスが { "_id":"e01", "name":"Andy", "salary":"10000", "address":"ad01id" } の外部キーである単純な従業員ドキュメントです。以下のように文書化します(この上の従業員の場合)

<前>ウィズウィズ

Address をフェッチするクエリを書くための助けが必要ですしかし、 { "_id": "ad01id", "pin":"999", "Home":{ "street":"101", "city":"someCity" }, "Country":"someCountry" } を持つ出力を私に与えます の Employee ドキュメント全体が次のように展開されたフィールド

<前>ウィズウィズ

私は Employee を試しましたそして address しかし、望ましい出力を得ることができませんでした- { "_id":"e01", "name":"Andy", "salary":"10000", "address":{ "pin":"999", "Home":{ "street":"101", "city":"someCity" }, "Country":"someCountry" } } 後のドキュメントに同じキーがある場合、初期のドキュメントのキーを非表示にします。これは、私の実際のシナリオの場合です。実際のドキュメントには、同じ名前のキーがいくつかあります。 $lookup など私の実際のドキュメントの両方にあります。

前もって感謝します!

$merge
あなたの答え
  • 解決した方法 # 1

    $lookupは、両方のコレクションのデータを「結合」するために必要です。$unwindまたは$arrayElemAtを使用して、 $lookup の結果である配列を変換できます。  ネストされたサブドキュメントに:

    <前>ウィズウィズ

    モンゴプレイグラウンド

  • 解決した方法 # 2

    Populateを使用することもできます。

    <前>ウィズウィズ db.Employee.aggregate([ { $lookup: { from: "Address", localField: "address", foreignField: "_id", as: "address" } }, { $addFields: { address: { $arrayElemAt: [ "$address", 0 ] } } }, { $project: { "address._id": 0 } } ])

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ java - @Transactionalがカスタムトランザクションマネージャーを使用したSpring Bootで機能しない