arrays - 用于过滤对象数组内的数据的数据库查询
问题描述
我的 mongodb 中有一堆以下格式的文档,我使用 moongoose 作为 ORM。
有人可以帮我查询一下里面有name
=的所有内容吗abc
data-items.content
文件 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"
}]
}
}
任何帮助表示赞赏
解决方案
您可以简单地使用点符号来查询嵌套文档数组:
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将为您提供单个文档,content
而$replaceRoot会将其提升到根级别。
推荐阅读
- python - 需要根据csv文件python中的列数创建多个变量
- pytorch - 如何张量多个 3D 关键点的损失
- sql - MS-Access SQL 多级自联接
- vue.js - Send props to frameworkComponents (ag-grid) with Vue
- javascript - TypeError:rules.map 不是函数 - React js
- c - Linux 上的堆栈开始
- cassandra - 即使条件匹配,ansible 条件语句也会跳过剧本
- linux - Linux sendmail命令在cron中不发送邮件
- scikit-learn - 对 BaggingClassifier 参数内的参数进行网格搜索
- jquery - 如何始终将元素放在第一个位置?