mongodb - 从 mongodb 中的嵌套文档中获取数据 / 查找不起作用
问题描述
我的集合中有这样的数据,称为用户
{
"_id" : ObjectId("5aeffdb80e006205640052ff"),
"name" : "KOTA AMBON",
"email" : "ambon@gmail.com",
"password" : "$2y$10$VVaGAVniUbgBnDw6x5yZ0uAvJDGa5ekmVPJk/1Lubz5yKzZ75opo2",
"updated_at" : ISODate("2018-05-07T07:18:16Z"),
"created_at" : ISODate("2018-05-07T07:18:16Z"),
"dinas" : [
{
"id" : "5aeffdb80e006205640052ff_5af0101d0e00620564005307",
"nama_dinas" : "dinas perikanan",
"deskripsi_dinas" : "dinas untuk ikan",
"keyword" : "ikan"
},
{
"id" : "5aeffdb80e006205640052ff_5af010390e00620564005308",
"nama_dinas" : "dinas perhubungan",
"deskripsi_dinas" : "dinas untuk hubungan",
"keyword" : "jalan"
}
]
}
我想获取dinas
属性id
“5aeffdb80e006205640052ff_5af0101d0e00620564005307”在哪里
我使用了函数db.users.find('dinas.id', '5aeffdb80e006205640052ff_5af0101d0e00620564005307')
,但输出仍然dinas
像我上面写的那样调用所有元素。
我做错什么了吗?
解决方案
在 MongoDB 中过滤(使用find
)将始终返回整个文档,您必须添加投影作为find
方法的第二个参数,如下所示:
db.users.find({"dinas.id": "5aeffdb80e006205640052ff_5af0101d0e00620564005307"},
{ "dinas": { $elemMatch: { id: "5aeffdb80e006205640052ff_5af0101d0e00620564005307" } } });
投影中的$elemMatch将过滤您的嵌套数组并返回第一个匹配元素(假设您的 id 是唯一的,这很好)
推荐阅读
- git - 如何配置 Git 或 Gitlab,以便只允许分支的所有者推入它?
- splunk - 需要在 Splunk 中创建一个嵌套表或多列的表
- r - 在 R 的子函数中使用两列
- vb6 - 没有特定 DLL 引用的 VB6 项目编译
- twitter-bootstrap - 如何使我的 Bootstrap 日期选择器工作,是否有“官方”Bootstrap 3 日期选择器?
- spring - Spring Security:反向代理后面的 X509(预)身份验证
- python - 如何在不调用 Python 中的方法的情况下更改类中的属性值?
- hibernate - Hibernate Unknown 列字段列表“clazz_”
- javascript - Access-Control-Allow-Headers 它究竟做了什么以及为什么将它包含在响应中?
- java - maven 提供了自己的 postgreSQL 驱动程序依赖项,但没有看到它