Ram*_*pak 0 mongoose mongodb node.js express
我在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"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在子文档中查找数据时,使用以下代码:
person.findOne({ _id: req.params.person, {'family.nama': new RegExp('robert', 'gi') }}, function(err, data){
// render code here
});
Run Code Online (Sandbox Code Playgroud)
它显示了家庭数据中的所有数据,我们是否可以获取或显示仅与条件/关键字匹配的数据,例如仅"Robert Deniro"行
谢谢
在'常规'MongoDB中,您可以使用$运算符.我不确定它是否适用于Mongoose,但值得一试:
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
});
Run Code Online (Sandbox Code Playgroud)
如果您需要父文档中的任何属性(tempat_lahir,tanggal_lahir或gender; _id将始终包含),则需要显式地将它们添加到投影对象.
一个警告:$操作员只返回数组中的第一个匹配文档.如果需要它来返回多个文档,则无法使用此方法,并且(AFAIK)必须在从数据库返回结果后对结果进行后处理.