gpt4 book ai didi

node.js - Mongodb 只获取符合条件的子文档

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:50 25 4
gpt4 key购买 nike

我在 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
});

它显示了家庭数据中的所有数据,我们能否获取或显示仅与条件/关键字匹配的数据,例如仅“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
});

如果您需要父文档中的任何属性(tempat_lahirtanggal_lahirgender_id 将始终包含在内),则需要将它们显式添加到投影对象中。

需要注意的是:$ 运算符只会返回数组中第一个 匹配的文档。如果您需要它返回多个文档,则不能使用此方法,并且(据我所知)必须在从数据库返回结果后对其进行后处理。

关于node.js - Mongodb 只获取符合条件的子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com