数据库查询以过滤对象数组中的数据
Database query to filter data inside an object array
我的 mongodb 中有一堆以下格式的文档,我正在使用 moongoose 作为 ORM。
谁能帮我查询一下在data-items.content
里面有name
=abc
的所有内容
文档 1:
{
"title": "Some title",
"addresse": "data",
"data-items": {
"content": [
{
"name": "abc",
"age": "poster5.jpg"
},
{
"name": "def",
"age": "poster5.jpg"
},
{
"name": "hij",
"age": "poster5.jpg"
}]
}
}
文档 2:
{
"title": "another title",
"addresse": "data",
"data-items": {
"content": [
{
"name": "abc",
"age": "poster7.jpg"
},
{
"name": "def",
"age": "poster5.jpg"
},
{
"name": "hij",
"age": "poster5.jpg"
}]
}
}
感谢任何帮助
您可以简单地使用 dot notation 查询嵌套文档数组:
Model.find({"data-items.content.name": "abc"})
编辑:要仅获取符合您条件的子文档,您可以使用以下聚合:
Model.aggregate([
{
$match: {
"data-items.content.name": "abc"
}
},
{
$unwind: "$data-items.content"
},
{
$match: {
"data-items.content.name": "abc"
}
},
{
$replaceRoot: {
newRoot: "$data-items.content"
}
}
])
$unwind will give you single document per content
and $replaceRoot 会将其提升到根级别。
我的 mongodb 中有一堆以下格式的文档,我正在使用 moongoose 作为 ORM。
谁能帮我查询一下在data-items.content
name
=abc
的所有内容
文档 1:
{
"title": "Some title",
"addresse": "data",
"data-items": {
"content": [
{
"name": "abc",
"age": "poster5.jpg"
},
{
"name": "def",
"age": "poster5.jpg"
},
{
"name": "hij",
"age": "poster5.jpg"
}]
}
}
文档 2:
{
"title": "another title",
"addresse": "data",
"data-items": {
"content": [
{
"name": "abc",
"age": "poster7.jpg"
},
{
"name": "def",
"age": "poster5.jpg"
},
{
"name": "hij",
"age": "poster5.jpg"
}]
}
}
感谢任何帮助
您可以简单地使用 dot notation 查询嵌套文档数组:
Model.find({"data-items.content.name": "abc"})
编辑:要仅获取符合您条件的子文档,您可以使用以下聚合:
Model.aggregate([
{
$match: {
"data-items.content.name": "abc"
}
},
{
$unwind: "$data-items.content"
},
{
$match: {
"data-items.content.name": "abc"
}
},
{
$replaceRoot: {
newRoot: "$data-items.content"
}
}
])
$unwind will give you single document per content
and $replaceRoot 会将其提升到根级别。