mongodb - 如何在猫鼬聚合期间有条件地投影字段
问题描述
我有一个类似的问题文件。
[
{
type:"general",
viewers:[
{userId:"1", viewedAt:"10 Aug"},
{userId:"2", viewedAt:"12 Aug"}
]
},
{
type:"programming",
viewers:[
{userId:"3", viewedAt:"1 Aug"},
{userId:"2", viewedAt:"19 Aug"}
]
}
]
并且预期的结果添加称为的附加字段viewed
是:
如果给定userId
假设userId:1
在观众列表中,则添加viewed:true
否则viewed:false
如下:
[
{
"type":"general",
"viewed":"true"
},
{
"type":"general",
"viewed":"false"
}
]
我尝试了这段代码,但显示错误:
Question.aggregate([
{
$project:{
type:1,
viewed:{
$cond:[
{$viewedBy:{"userId":1}},"true","false"
]
}
}
}
])
PS:我稍微更新了我的问题,查看器中的对象有多个键值对。即userID
, viewedAt
_filledAt
解决方案
使用$in
3.4 中的聚合表达式。
Question.aggregate([
{
$project:{
type:1,
viewed:{
$cond:[ {$in:[{userId:"1"}, "$viewers"]},"true","false"]
}
}
}
])
或者
Question.aggregate([
{
$project:{
type:1,
viewed:{
$cond:[ {$in:["1", "$viewers.userId"]},"true","false"]
}
}
}
])
推荐阅读
- django - 当我单击登录页面上的提交按钮时,它会重定向到 django 中的随机 csrf 令牌页面
- typescript - Angular6 - 使用名称获取嵌套的 FormGroup
- python - Python按顺序运行线程
- u-sql - U-sql:如何处理具有多个 JSON 数组和多个对象的 Avro 文件?
- javascript - 难以使用在 javascript 中收到的 php json_encode 数据来使用 chart.js 库显示图形
- sql - MSSQL Transpose / Pivot data in to columns by type
- powerbi - 订购带有空白到基础的矩阵视觉对象
- jsf - @org.omnifaces.cdi.ViewScoped 在卸载已销毁的视图时调用 @PostConstruct
- arrays - 如何在 interface{} 中迭代数组?
- java - Java Joda 时间无法解析 DateTimeFormat::longTime