2017-08-18 10 views
0

mongodbとmongooseを使用してnode.jsアプリケーションを作成しています。私は "単一のネストされたサブ文書"を照会する方法を理解する上で問題があるようです。私は次のような例を持っている場合:mongodb:1つのネストされたサブ文書を作成する方法

var childSchema = new Schema({ name: 'string' }); 

var parentSchema = new Schema({ 
    // Array of subdocuments 
    children: [childSchema], 
    // Single nested subdocuments. Caveat: single nested subdocs only work 
    // in mongoose >= 4.2.0 
    child: childSchema 
}); 

マングースのドキュメントから、どのように私は、単一のネストされたシナリオの子サブドキュメントを読み込むのですか?私は ".populate(" child ")。exec ..."を使用しようとしましたが、mongoコマンドラインからdb.child.find()を実行すると、子オブジェクトがnullを返します。今、私は "parent.children.id(_id)"と呼ばなければならないドキュメンテーションを見ましたが、この場合、事前に_idを知ることはできません。

更新:データを削除しました。現在は動作しているようです。

+0

データは「埋め込まれている」ので、すでにそこに存在するため「データを取り込む」ことはありません。母集団は、他のコレクションから「参照された」データを検索することを指します。近代的なMongoDBのリリースでは、 '$ lookup'によって多かれ少なかれ置き換えられています。しかし、ここでも全く必要ない。 –

+0

これがどのように機能するかを実証するために、上のコードの例を私に見せてもらえますか? – user1790300

+0

どのような例ですか? 「埋め込まれている」とは、すでに「そこにある」という意味です。単に文書を取り出すだけです。ジョブが完了しました。実際に何かを保管していますか?質問は何ですか?あなたは何をした?あなたはまだ何を理解していないのですか? –

答えて

0

子ドキュメントを親ドキュメント内に埋め込みドキュメントとして保存しているので、読み込む必要はありません。 Populateは、クエリの実行中に入力する他のドキュメントへの参照を格納する場合に使用します。そのような場合のための例は次のようになります。

var childSchema = new Schema({ name: 'string' }); 
var childModel = mongoose.model("child", childSchema); 

var parentSchema = new Schema({ 
    // Array of subdocuments 
    children: [childSchema], 
    child: { 
    type: Schema.ObjectId, ref: 'child' 
    } 
}); 

を今、あなたはparentを照会しながら、childを移植しようとした場合、それが動作するはずです。

関連する問題