サブ配列の別のコレクションにあるプロパティを呼び出すにはどうすればよいですか?

yavg

私は2つのコレクションを持っています:1つはとplaces呼ばtype_placesます。aplaceは場所のタイプ(type_places)を関連付けており、これはthis(objects配列)からいくつかのオブジェクトを関連付けている可能性があります

type_places
{
  "_id": "5fbc7cc705253c2da482023f",
  "type_place": "office",
  "objects": [
    {
      "_id": "5fbc7cc705253c2da48202saw",
      "name": "chair"
    },
    {
      "_id": "5fbc7cc705253c2da4820242",
      "name": "table"
    },
    {
      "_id": "5fbc7cc705253c2da482025f",
      "name": "desktop"
    }
  ]
}

places
{
    "_id": "5fbc7cc705253c2da482025f",
    "place": "Room 5",
    "type_place_id": "5fbc7cc705253c2da482023f", /*"office"*/
    "type_place_objects": [
      {
        "_id": "5fbc7cc705253c2da48202saw", /*chair*/
        "quantify": 4
      },
      {
        "_id": "5fbc7cc705253c2da482025f", /*desktop*/
        "quantify": 2
      }
    ]
  }

次にplace、クエリを実行すると、照会された内容、placeその場所の種類(type_place)、およびobjectsその種類の場所が表示されます。

必要な出力:

{
  "_id": "5fbc7cc705253c2da482023f",
  "place": "Room 5",
  "type_place_objects": [
    {
      "_id": "5fbc7cc705253c2da48202saw",
      "name": "chair",
      "quantify": 4
    },
    {
      "_id": "5fbc7cc705253c2da482025f",
      "name": "desktop",
      "quantify": 2
    }
  ]
}

私はこれを試していますが、機能しません:

place.aggregate(
[
  {
    "$match": {"place":"Room 5"}
  },

  {
    "$lookup": {
      "from": "type_place",
      "localField": "type_place_id",
      "foreignField": "_id",
      "as": "type_place_objects"
    }
  },
  {
    "$sort": {
      "_id": -1
    }
  },
  {
    "$project": {
      "_id":1,
      "place":1,
      "type_place_objects": 1
    }
  }
  
])

どうすれば修正できますか?

承知しました

多くの方法があります、1つの方法は$lookupあなたがすでに試したように使用することです

db.place.aggregate([
  { "$match": { "place": "Room 5" } },
  { $unwind: "$type_place_objects"  },
  {
    "$lookup": {
      "from": "type_place",
      "let": { tpo: "$type_place_objects._id" },
      "pipeline": [
        { $unwind: "$objects" },
        {
          $match: {
            $expr: {
              $eq: [ "$objects._id", "$$tpo" ]
            }
          }
        }
      ],
      "as": "join"
    }
  },
  {
    $addFields: {
      "join": { "$arrayElemAt": [ "$join", 0]
      }
    }
  },
  {
    $addFields: { "type_place_objects.name": "$join.objects.name" }
  },
  {
    $group: {
      _id: "$_id",
      place: { $first: "$place" },
      type_place_objects: { "$addToSet": "$type_place_objects" }
    }
  }
])

働くモンゴの遊び場

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

すべてのDateTimeプロパティをコレクション内の別のTimeZoneに変換するにはどうすればよいですか?

分類Dev

配列にあるプロパティごとにこの関数を呼び出すにはどうすればよいですか?リアクトネイティブ

分類Dev

Meteorコレクション/ minimongoの1つのドキュメントの配列内の複数のオブジェクトのプロパティを更新するにはどうすればよいですか?

分類Dev

配列のコレクションでサブコレクションを実現するにはどうすればよいですか?

分類Dev

EF Coreの関連コレクションのプロパティでIsModifiedをfalseに設定するにはどうすればよいですか?

分類Dev

マネージドアクションの呼び出し後にコントロールプロパティを操作するにはどうすればよいですか?

分類Dev

Pythonフラスコsqlalchemyマシュマロアプリで1つのプロパティオブジェクト配列をフラット配列にレンダリングするにはどうすればよいですか?

分類Dev

あるクラスのプロトコルを別のクラスからすばやく呼び出すにはどうすればよいですか?

分類Dev

呼び出し元のコンテキストでスクリプトブロックを呼び出すにはどうすればよいですか?

分類Dev

別のディレクティブ内でLaravelBladeディレクティブを呼び出すにはどうすればよいですか?

分類Dev

meteorで1回のサブスクリプション呼び出しで複数のコレクションを公開するにはどうすればよいですか?

分類Dev

非公開のコレクションプロパティをEntityFramework Code Firstでマッピングするにはどうすればよいですか?

分類Dev

ビューモデルのプロパティにコレクションを設定するにはどうすればよいですか?

分類Dev

別のオブジェクトのプロパティである関数を関数に渡して、JavaScriptで呼び出すにはどうすればよいですか?

分類Dev

コレクション内のプロパティに特定の値を割り当てるにはどうすればよいですか?

分類Dev

djangoの同じモデルの別のプロパティを呼び出す/参照するにはどうすればよいですか?

分類Dev

別のクラスでプロパティが変更された後、メソッドを呼び出すにはどうすればよいですか?

分類Dev

EFコアでは、あるクラスにエンティティを追加した後、SaveChanges()を呼び出さずに別のクラスからエンティティにアクセスするにはどうすればよいですか?

分類Dev

どのパーティションに不良ブロックがあるかを判断するにはどうすればよいですか?

分類Dev

オブジェクトのプロパティまたは関数呼び出しに特定の値を返すにはどうすればよいですか?

分類Dev

Laravel Eloquent ORM-配列内のコレクションから/のすべてのプロパティを取得するにはどうすればよいですか?

分類Dev

datetimeプロパティを別のプロパティとtimespan値を比較して子コレクションをフィルタリングするにはどうすればよいですか?

分類Dev

別のクラスでマップアノテーションプロパティを取得するにはどうすればよいですか?

分類Dev

LINQ(一括)を使用してコレクション内のプロパティを割り当てるにはどうすればよいですか?

分類Dev

同じサーバーにデプロイされている別のプロジェクトにあるコントローラー関数を呼び出すにはどうすればよいですか?

分類Dev

Laravelのコレクションに配列値を追加するにはどうすればよいですか?

分類Dev

配列内でプッシュされたオブジェクトのプロパティを設定するにはどうすればよいですか?

分類Dev

YAML Swagger定義で、プロパティタイプを文字列のリスト(リスト、セット、配列、コレクション)として定義するにはどうすればよいですか?

分類Dev

サブプロセスの呼び出しをテキストファイルにパイプ処理するにはどうすればよいですか?

Related 関連記事

  1. 1

    すべてのDateTimeプロパティをコレクション内の別のTimeZoneに変換するにはどうすればよいですか?

  2. 2

    配列にあるプロパティごとにこの関数を呼び出すにはどうすればよいですか?リアクトネイティブ

  3. 3

    Meteorコレクション/ minimongoの1つのドキュメントの配列内の複数のオブジェクトのプロパティを更新するにはどうすればよいですか?

  4. 4

    配列のコレクションでサブコレクションを実現するにはどうすればよいですか?

  5. 5

    EF Coreの関連コレクションのプロパティでIsModifiedをfalseに設定するにはどうすればよいですか?

  6. 6

    マネージドアクションの呼び出し後にコントロールプロパティを操作するにはどうすればよいですか?

  7. 7

    Pythonフラスコsqlalchemyマシュマロアプリで1つのプロパティオブジェクト配列をフラット配列にレンダリングするにはどうすればよいですか?

  8. 8

    あるクラスのプロトコルを別のクラスからすばやく呼び出すにはどうすればよいですか?

  9. 9

    呼び出し元のコンテキストでスクリプトブロックを呼び出すにはどうすればよいですか?

  10. 10

    別のディレクティブ内でLaravelBladeディレクティブを呼び出すにはどうすればよいですか?

  11. 11

    meteorで1回のサブスクリプション呼び出しで複数のコレクションを公開するにはどうすればよいですか?

  12. 12

    非公開のコレクションプロパティをEntityFramework Code Firstでマッピングするにはどうすればよいですか?

  13. 13

    ビューモデルのプロパティにコレクションを設定するにはどうすればよいですか?

  14. 14

    別のオブジェクトのプロパティである関数を関数に渡して、JavaScriptで呼び出すにはどうすればよいですか?

  15. 15

    コレクション内のプロパティに特定の値を割り当てるにはどうすればよいですか?

  16. 16

    djangoの同じモデルの別のプロパティを呼び出す/参照するにはどうすればよいですか?

  17. 17

    別のクラスでプロパティが変更された後、メソッドを呼び出すにはどうすればよいですか?

  18. 18

    EFコアでは、あるクラスにエンティティを追加した後、SaveChanges()を呼び出さずに別のクラスからエンティティにアクセスするにはどうすればよいですか?

  19. 19

    どのパーティションに不良ブロックがあるかを判断するにはどうすればよいですか?

  20. 20

    オブジェクトのプロパティまたは関数呼び出しに特定の値を返すにはどうすればよいですか?

  21. 21

    Laravel Eloquent ORM-配列内のコレクションから/のすべてのプロパティを取得するにはどうすればよいですか?

  22. 22

    datetimeプロパティを別のプロパティとtimespan値を比較して子コレクションをフィルタリングするにはどうすればよいですか?

  23. 23

    別のクラスでマップアノテーションプロパティを取得するにはどうすればよいですか?

  24. 24

    LINQ(一括)を使用してコレクション内のプロパティを割り当てるにはどうすればよいですか?

  25. 25

    同じサーバーにデプロイされている別のプロジェクトにあるコントローラー関数を呼び出すにはどうすればよいですか?

  26. 26

    Laravelのコレクションに配列値を追加するにはどうすればよいですか?

  27. 27

    配列内でプッシュされたオブジェクトのプロパティを設定するにはどうすればよいですか?

  28. 28

    YAML Swagger定義で、プロパティタイプを文字列のリスト(リスト、セット、配列、コレクション)として定義するにはどうすればよいですか?

  29. 29

    サブプロセスの呼び出しをテキストファイルにパイプ処理するにはどうすればよいですか?

ホットタグ

アーカイブ