在下图中,我使用的是$project聚合。我需要比较textfeild是否等于"A",或者是否使用$cond。如果此布尔条件为true,则应返回1,否则返回0。但它显示舞台必须正确格式化
{
'answers.Urban_City.text': 1,
SEC_A: {$cond:['answers.SEC.text':['$eq','A'], 1, 0]}
}
罗盘图像链路
示例文档我有多个类似的文档
{
"_id": {
"$oid": "61dea2c1169cd059e2d1a06e"
},
"metaKey": {
"projectId": 7,
"sectionId": 5,
"userId": 5,
"simpleSurveyResponseCode": "58836213476714"
},
"answers": [
{
"Urban_City": {
"text": "Karachi",
"value": "72"
}
},
{
"SEC": {
"text": "A",
"value": "1"
}
}
],
"__v": 0
}
我想要这种
db.Sentiments.aggregate(
{ $project: {
_id: 0,
Company: 1,
PosSentiment: {$cond: [{$gt: ['$Sentiment', 0]}, '$Sentiment', 0]},
NegSentiment: {$cond: [{$lt: ['$Sentiment', 0]}, '$Sentiment', 0]}
}},
{ $group: {
_id: "$Company",
SumPosSentiment: {$sum: '$PosSentiment'},
SumNegSentiment: {$sum: '$NegSentiment'}
}});
但在Sentiment的位置,我有SEC,它是嵌入的数组,包含样本文档中提到的两个feild(String(。如果这个问题得到解决,我在$project聚合中遇到的问题$group对我来说很容易。
试试这个:
db.collection.aggregate([
{
$project: {
'answers.Urban_City.text': 1,
SEC_A: {
$map: {
input: "$answers",
in: { $cond: [{ $eq: ['$$this.SEC.text', 'A'] }, 1, 0] }
}
}
}
}
])
如果你提供了一个想要的样本输出,那么为了得到一个合适的答案,变化会更大。