2017-04-02 63 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個職位,其中(第一項)一個已經2應用候選人,我需要做的是返回嵌套如果它匹配貓鼬查詢。

+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

是的,你會得到所有的數據,但現在你應用的數組將是一個對象,只會如果您的位置=「58d153e97e3317291gd80087」,您的結果可以通過結果[0] .position [0] .applied.name訪問,並且它應該等於「Sample用戶「(考慮你的例子) –

+0

非常感謝你@Shumi Gupta,你真的幫助了我,現在它的工作!:) – user