2015-07-12 71 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