2017-04-02 11 views
0

をほどく私がどのように見えるネストされた文書があります:私はやって探しています何

var User = new Schema({ 
    id: String, 
    position: [{ 
     title: String, 
      applied:[{ 
       candidate_id: String, 
       name: String 
     }], 
     }], 

は、特定の「candidate_id」

に一致する「適用」サブ文書のすべてを返すです

私がこれまで持っている:

app.get('/applied', function(req, res){ 

    var position = "58dc2bd4e7208a3ea143959e"; 

    User.aggregate(
     {$unwind : "$position"}, 
     {$unwind : "$position.applied"}, 
     {$match:{'position.applied.candidate_id': position}}).exec(function (err, result) { 
      console.log(result); 
     }); 
     res.render('applied', { title: 'applied',layout:'candidate'}); 
}); 

私は一致するすべての位置を返す別の関数を持っており、そのコードは動作します:

app.post('/search', function (req, res) { 

    var position = new RegExp(req.body.position, 'i'); 
    var location = new RegExp(req.body.location, 'i'); 

    User.aggregate(
     {$unwind : "$position"}, 
     {$match:{'position.title': position,'position.location':location}}).exec(function (err, result) { 
     console.log(result); 
     res.send({ results: result }); 
    }); 
}); 

したがって、基本的に私はサブサブドキュメントを取得するのに苦労しています。私がどこに間違っているのか?

サンプルデータ:

{ 
"_id" : ObjectId("58c2871414cd3d209abf5fc9"), 
"position" : [ 
    { 
     "_id" : ObjectId("58d6b7e11e793c9a506ffe8f"), 
     "title" : "Software Engineer", 

     "applied" : [ 
      { 
       "candidate_id" : "58d153e97e3317291gd80087", 
       "name" : "Sample user" 

      }, 
      { 
       "candidate_id" : "58d153e97e3317291fd99001", 
       "name" : "Sample User2" 

      } 
     ] 
    }, 
    { 
     "_id" : ObjectId("58c2871414cd3d209abf5fc0"), 
     "title" : "Software Engineer", 

    } 
], 

}

上記で何が起こっているのかは、2箇所があり、(最初のエントリ)の1、2、私が行うために必要なもの、候補を適用した、ネストされたが返されていますmongooseクエリと一致する場合はオブジェクト。

+0

何が起こっているかまた、これが適切に動作していないといういくつかのサンプルデータがありますか? –

+0

@ExplosionPills配列が空に戻ってきています。いくつかのサンプルデータを表示するために質問を更新します! – user

答えて

1

あなたのコードは、私が同じ実装されているとそれが使用することによって、それはそれを文字列として話をされる可能性がありますあなたの位置=「58dc2bd4e7208a3ea143959e」はちょうどOBJECTIDに変換することを、以下にすることができ、私だけの可能な問題のために働く私には罰金ですコードとそれがあなたのために働くはずです確認してください。

var mongoose = require('mongoose'); 

    var position = mongoose.Types.ObjectId("58dc2bd4e7208a3ea143959e"); 

      User.aggregate(
       {$unwind : "$position"}, 
       {$unwind : "$position.applied"}, 
       {$match:{'position.applied.candidate_id': position}}).exec(function (err, result) { 
        console.log(result); 
       }); 
       res.render('applied', { title: 'applied',layout:'candidate'}); 
     }); 
+0

私のデータベースでは、candidate_idフィールドはその前に 'ObjectId'がないだけの番号だったので、データを取得できるようになりましたが、位置配列だけが巻き戻されています。適用された配列はコンソールの私に "applied:[Object]"として返され、ユーザー全体を返すだけです:( – user

+0

はい、すべてのデータを取得しますが、適用される配列はオブジェクトになりますあなたの結果があなたのposition = "58d153e97e3317291gd80087"のようなあなたの条件と一致する条件のユーザの結果を持っているなら、result [0] .position [0] .applied.nameでアクセスすることができ、 "Sampleユーザー "(あなたの例を考えて) –

+0

ありがとう@ Shumi Gupta、あなたは本当に私を助けてくれました! – user

関連する問題