我有一个包含以下模式的文档的集合.我想过滤/查找所有包含性别女性的文档,并汇总brainscore的总和.我try 了下面的语句,它显示了一个无效的管道错误.

db['!all'].aggregate({ $and: [ {'GENDER' :  'F'} , {'DOB' : { $gte : 19400801, $lte : 20131231 }} ]  }, { $group : { _id : "$GENDER", totalscore : { $sum : "$BRAINSCORE" } } } )

模式:

{
    "_id" : ObjectId("53f63fc8f2b643f6ebb8a1a9"),
    "DOB" : 19690112,
    "GENDER" : "F",
    "BRAINSCORE" : 65
},
{
    "_id" : ObjectId("53f63fc8f2b643f6ebb8a1a2"),
    "DOB" : 19950116,
    "GENDER" : "F",
    "BRAINSCORE" : 44
},
{
    "_id" : ObjectId("53f63fc8f2b643f6ebb8a902"),
    "DOB" : 19430216,
    "GENDER" : "M",
    "BRAINSCORE" : 71
}

推荐答案

你必须使用$match:

db['!all'].aggregate([
  {$match:
    {'GENDER': 'F',
     'DOB':
      { $gte: 19400801,
        $lte: 20131231 } } },
  {$group:
     {_id: "$GENDER",
     totalscore:{ $sum: "$BRAINSCORE"}}}
])

输出:

{ "_id" : "F", "totalscore" : 109 }

Mongodb相关问答推荐

MongoDB Aggregate:查找每个月的交叉日期范围的数量

获取文档字段名并将其作为嵌套字段添加到聚合中

在不知道字段名称的情况下如何引用 MongoDB 中的字段?

MongoDB 在一个聚合中包含多个组

数组过滤器 MongoDB

MongoDB 按 created_at 月聚合

避免在 MongoDB 聚合框架中使用 ISODate() 以便管道可以是纯 JSON

无法提取地理键,经度/纬度超出范围

GeoJSON 和 MongoDB:将点存储为 GeoJSON.Point 是否值得?

在 Heroku 上使用 Node 读取、写入和存储 JSON

你如何在 Kubernetes 上设置 Mongo 副本集?

如何在 MongoDb 中使用杰克逊将日期字段存储为 ISODate()

mongodb 模式设计命名约定

升级mongodb

MongoDB:单个数据库处理程序的 >5 个打开连接

如何为 node.js 中的 MongoDB 索引指定 javascript 对象中的属性顺序?

Java + MongoDB:更新文档中的多个字段

聚合 $lookup 匹配管道中文档的总大小超过最大文档大小

MongoDB Compass:select distinct field values

在mongoose中创建和查找地理位置