从 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 是唯一的,这很好)
我的 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 是唯一的,这很好)