2016-07-13 12 views
0

私は以下のmongodb(私の平均スタックアプリケーション用)のスキーマを持っています。Mongodbはネストされた参照オブジェクトを表示します

var helpSchema = new Schema({ 
    //_id: Number, 
    description: String, 
    summary: String, 
    flows: [{ type: Schema.Types.ObjectId, ref: 'Flow' }] 
}); 


var flowSchema = new Schema({ 
    _problem: { type: Number, ref: 'Help' }, 
    name: String, 
    steps: [{ type: Schema.Types.ObjectId, ref: 'Step' }] 
}); 

私は以下のようにデータベースに挿入しています:

var help = new models.Help(); 
     help.description = 'description'; 
     help.summary = 'summary'; 

     var flow = new models.Flow(); 
     flow.name = 'name'; 

     help.flows.push(flow); 
help.save(function(err) { 
... 
} 

値は、DBに挿入され、私は照会することができています。 db.helps.find();その結果、以下の戻り

{ "_id" : ObjectId("5786520f580cc96c31c90769"), "summary" : "summary", "description" : "description", "flows" : [ ObjectId("5786520f580cc96c31c9076a") ], "__v" : 0 } 

は、今私は、コマンドラインからクエリを実行し、フロー配列のオブジェクト内の値を見ることができますか?私は検索して、inがネストされたオブジェクト内のフィールドを照会できることを発見しました。しかし、私はこの値をコマンドラインで表示できますか?

+0

'db.flows.find({_ ID: }) ' –

+0

それは私に空の結果を与えます。また、私はコレクションを表示した場合、それは私だけが役立つことを示しています。それは問題ですか? –

答えて

1

flowsフィールドの値のみを配列に要求するには、mapを使用できます。 入力パラメータとして、

カーソルで訪れた各文書に適用する関数です。

これはあなたを与える:

flows_id = function(doc) { return doc.flows; } 
db.helps.find().map(flows_id) 

ObjectId値から値を抽出するには、各項目にvalueOfを呼び出す必要があります:

flows_id = function(doc) { 
    var array = []; 
    doc.flows.forEach(function(myDoc){ 
     array.push(myDoc.valueOf()); 
    }); 
    return array; 
} 

db.helps.find().map(flows_id) 
+0

それは私にオブジェクトを与えます。しかし、私はオブジェクト内のフィールドを見ることができますか? –

+0

あなたは 'ObjectId'の中の値を意味しますか?' ["5786520f580cc96c31c9076a"、 "5786520f580cc96c31c9076b"] '? –

+0

はい..クエリは私にObjectId( "5786520f580cc96c31c9076a")を与えます。そのオブジェクトの中の値を取得できますか? –

関連する問題