作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 MongoDB 文档是这样的
{
"_id":"sdf23sddfsd",
"the_list":[
{
"Sentiment":[
"Negative",
"Positive",
"Positive"
]
},
{
"Sentiment":[
"Neutral",
"Positive"
]
}
],
"some_other_list":[
{
"Sentiment":[
"Positive",
"Positive",
"Positive"
]
}
]
}
我需要知道“the_list”字段中“Positive”的总出现次数,在上述情况下为 3,即“Positive”出现了 3 次。
显然,我从中得到一个文档数
db.tmp.find({ "the_list.Sentiment": { "$in": ["Positive"] } }).count()
还有一个来自:
db.tmp.aggregate(
{ $match: { "the_list.Sentiment": { "$in": ["Positive"] } } }
, { $group: { _id: "_id", count: { $sum: 1 } } }
)
最后,下面我在试验,还是得到零
db.tmp.aggregate(
{
$group: {
_id: "_id", count: {
$sum: {
$cond: [{"$in": ["Positive","$the_list.Sentiment"]} , 1, 0]
}
}
}
}
)
最佳答案
您需要过滤子文档数组以返回等于“Positive”的元素,并使用 $map
和“the_list”数组中的每个子文档返回结果数组的总和或等于“Positive”的元素数$filter
。从那里,您需要做的就是使用 $reduce
运算符合并总和
[
{
"$project": {
"count": {
"$reduce": {
"input": {
"$map": {
"input": "$the_list",
"in": {
"$filter": {
"input": "$$this.Sentiment",
"cond": {
"$eq": [
"$$this",
"Positive"
]
}
}
}
}
},
"initialValue": 0,
"in": {
"$add": [
"$$value",
{
"$size": "$$this"
}
]
}
}
}
}
}
]
在 MongoDB 3.4 之前,您需要一种不同的方法,如此管道所示
[
{
"$project": {
"arrayOfSum": {
"$sum": {
"$map": {
"input": "$the_list",
"in": {
"$size": {
"$filter": {
"input": "$$this.Sentiment",
"cond": {
"$eq": [
"$$this",
"Positive"
]
}
}
}
}
}
}
}
}
}
]
关于mongodb - 从文档中的内部数组获取值的总出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45021458/
我是一名优秀的程序员,十分优秀!