1. ホーム
  2. node.js

[解決済み] mongoose でネストした配列に値を入れる

2022-04-28 04:07:01

質問

例題のドキュメントで、quot;components"を入力するにはどうしたらよいですか。

  {
    "__v": 1,
    "_id": "5252875356f64d6d28000001",
    "pages": [
      {
        "__v": 1,
        "_id": "5252875a56f64d6d28000002",
        "page": {
          "components": [
            "525287a01877a68528000001"
          ]
        }
      }
    ],
    "author": "Book Author",
    "title": "Book Title"
  }

これは私のJSで、Mongooseからドキュメントを取得するところです。

  Project.findById(id).populate('pages').exec(function(err, project) {
    res.json(project);
  });

解決方法は?

Mongoose 4.5 はこれをサポートします。

Project.find(query)
  .populate({ 
     path: 'pages',
     populate: {
       path: 'components',
       model: 'Component'
     } 
  })
  .exec(function(err, docs) {});

そして、複数のディープレベルに参加することができます。

2021年3月17日編集。これはライブラリの実装で、裏でやっていることは、別のクエリを作ってフェッチし、メモリ上で結合することです。しかし、これは動作しますが、私たちは本当に依存してはいけません。これは、あなたのデータベースがSQLテーブルのように見えるようにします。これはコストのかかる操作で、うまく拡張できません。結合を減らすようにドキュメントを設計するよう心がけてください。