首页 > 解决方案 > 从 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像我上面写的那样调用所有元素。

我做错什么了吗?

标签: mongodbnestedfinddocuments

解决方案


在 MongoDB 中过滤(使用find)将始终返回整个文档,您必须添加投影作为find方法的第二个参数,如下所示:

db.users.find({"dinas.id": "5aeffdb80e006205640052ff_5af0101d0e00620564005307"},
{ "dinas": { $elemMatch: { id: "5aeffdb80e006205640052ff_5af0101d0e00620564005307" } } });

投影中的$elemMatch将过滤您的嵌套数组并返回第一个匹配元素(假设您的 id 是唯一的,这很好)


推荐阅读