【发布时间】:2020-08-02 22:43:04
【问题描述】:
我有一个集合 AccountSupport。我有一系列支持属性。我想过滤父属性和数组属性的记录
db = {
"AccountSupport": [
{
"_id" : ObjectId("5e9c6170b38c373530c5b00a"),
"accountName" : "domestic",
"supports" : [
{
"subject" : "Traverse",
"desc" : "Travers support consolidation",
},
{
"subject" : "Non Traverse",
"desc" : "Non Travers support consolidation",
},
{
"subject" : "Domestic Traverse",
"desc" : "Domestic Travers support consolidation",
}
],
}
我想过滤 accountName 和 support.subject。
以下是我的查询
db.AccountSupport.aggregate([
{
"$match": {
"$and": [
{
"supports.subject": "Traverse"
},
{
"accountName": "domestic"
}
]
}
},
{
"$unwind": "$supports"
},
{
"$project": {
"SupportName": "$supports.subject",
"desc": "$supports.desc"
}
}
])
上面的查询返回给我一个特定 accountName 的所有支持,而我只想要匹配主题的单个对象。以上是最简单的方法吗?
MongoPlayGround
【问题讨论】:
-
关于您对 Lean() 的评论,您是否使用了诸如 Mongoose 之类的 ORM?
-
@james 是的,我正在使用猫鼬
-
所以在你的 js 代码中,你能不能只获取第一个元素 [0] 来删除方括号,然后获取 "subject" 的第一个元素来返回 { accountName: 'domestic' { " SupportName": "Traverse", "desc": "Travers 支持合并" } }
-
是的,我只是这样做了,但我在答案中发布的查询也是如此。
标签: mongodb mongoose aggregation-framework match aggregate