从 mongodb 中的嵌套文档中获取数据 / 查找不起作用

get data from nested documents in mongodb / find is not working

我的 collection 中有这样的数据

{
    "_id" : ObjectId("5aeffdb80e006205640052ff"),
    "name" : "KOTA AMBON",
    "email" : "ambon@gmail.com",
    "password" : "y$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 中的所有元素,就像我上面写的那样。

我是不是做错了什么?

你需要看看array querying。问题是你的 dinas 是一个对象数组,而你试图直接将它作为一个对象来查询。

可能$elemMatch会对您有所帮助。类似于:

db.users.find({
    dinas: {
        $elemMatch: {
            id: 'youridhere'
        }
    }
});

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

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

$elemMatch 将过滤您的嵌套数组和 return 第一个匹配元素(假设您的 ID 是唯一的,这很好)