如何解决MongoDb中嵌套数组内的条件检查
经过几个流水线阶段,我提出了以下示例结果,它是一个文档。如果videos.views.userId
包含10
,则需要指出videos.isWatched = true
,否则需要false
。我们可以使用$unwind
,检查条件,然后group
。
这是示例输出,原始文档包含很多字段,因此我只想使用较少的代码,除非我需要unwind
有没有办法不用 { {1}}?
unwind("videos")
预期结果
[
{
"_id":"someId","videos":[
{
"_id":"1","name":"A","views":[
{
"userId":10,"group":"X"
}
]
},{
"_id":"2","name":"B","views":[
{
"userId":20,"group":"Y"
}
]
}
],"Assessment":[
{
"_id":"22","title": "Hello world"
}
]
}
]
解决方法
您可以将$map与$mergeObjects一起使用,以将新字段添加到现有数组中。 $anyElementTrue可用于确定是否有任何userId
等于10
:
db.collection.aggregate([
{
$addFields: {
videos: {
$map: {
input: "$videos",in: {
$mergeObjects: [
"$$this",{
isWatched: {
$anyElementTrue: {
$map: { input: "$$this.views",in: { $eq: [ "$$this.userId",10 ] } }
}
}
}
]
}
}
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。