2015-07-12 72 views
0

我在MongoDB的數據是這樣的:取子文檔的MongoDB僅匹配標準

{ 
    "_id" : ObjectId("55a12bf6ea1956ef37fe4247"), 
    "tempat_lahir" : "Paris", 
    "tanggal_lahir" : ISODate("1985-07-10T17:00:00.000Z"), 
    "gender" : true, 
    "family" : [ 
     { 
      "nama" : "Robert Deniro", 
      "tempat_lahir" : "Bandung", 
      "tanggal_lahir" : ISODate("2015-07-09T17:00:00.000Z"), 
      "pekerjaan" : "IRT", 
      "hubungan" : "XXX", 
      "tanggungan" : false, 
      "_id" : ObjectId("55a180f398c9925299cb6e90"), 
      "meta" : { 
       "created_at" : ISODate("2015-07-11T20:59:25.242Z"), 
       "created_ip" : "127.0.0.1", 
       "modified_at" : ISODate("2015-07-12T15:54:39.682Z"), 
       "modified_ip" : "127.0.0.1" 
      } 
     }, 
     { 
      "nama" : "Josh Groban", 
      "tempat_lahir" : "Jakarta", 
      "tanggal_lahir" : ISODate("2015-06-30T17:00:00.000Z"), 
      "pekerjaan" : "Balita", 
      "hubungan" : "Lain-Lain", 
      "tanggungan" : true, 
      "_id" : ObjectId("55a29293c65b144716ca65b2"), 
      "meta" : { 
       "created_at" : ISODate("2015-07-12T16:15:15.675Z"), 
       "created_ip" : "127.0.0.1" 
      } 
     } 
    ] 
} 

當我試圖找到子文檔中的數據,使用此代碼:

person.findOne({ _id: req.params.person, {'family.nama': new RegExp('robert', 'gi') }}, function(err, data){ 
    // render code here 
}); 

它顯示所有數據系列數據, 我們可以讀取或顯示數據僅匹配標準/關鍵字,例如只有「羅伯特·德尼羅」行

謝謝

+0

您是否在尋找這[只檢索MongoDB中集合的對象數組中的元素查詢(HTTP:/ /stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection)? – hassansin

回答

5

在「常規」MongoDB中,您可以使用$運算符。我不知道,如果它的工作原理與貓鼬,但它是值得一試:如果您需要任何從父文件屬性

person.findOne({ 
    _id   : req.params.person, 
    'family.nama' : new RegExp('robert', 'gi') 
}, { 
    // Only include the subdocument(s) that matched the query. 
    'family.$' : 1 
}, function(err, data){ 
    // render code here 
}); 

tempat_lahirtanggal_lahirgender; _id將始終包含),你需要明確地將它們添加到投影對象。

需要注意的一點是:$運營商將只返回第一個與該陣列匹配的文檔。如果您需要它返回多個文檔,則不能使用此方法,並且(AFAIK)必須在從數據庫返回後對結果進行後處理。

+0

這非常有幫助。保存了很多代碼。謝謝! – ashwinx

0

它解決與此代碼:

var options = { 
    family: { 
    $elemMatch: { nama: req.query.keyword } 
    }, 
}; 

person.findOne({ _id: req.params.person, 'family.nama': keyword }, options, function(err, data){ 
    //render code here 
}); 

由於@hassansin & @robertklep