MongoDb在聚合$ project中排除null

时间:2016-08-08 14:08:16

标签: mongodb mongodb-aggregation

我在MongoDb中有一个数据集合,其形状为:

[{ "_id": "1",
  "Sq1" : 5, 
  "Sq1comment" : "In general you aaaaaa.", 
  "Sq2" : 8, 
  "S2comment" : null, 
  "Sq3" : 5, 
  "Sq3comment" : "A person bbbbb."
 },
 { "_id": "2",
   "Sq1" : 4, 
   "Sq1comment" : "In general you cc.", 
   "Sq2" : 8, 
   "S2comment" : "A story ff", 
   "Sq3" : 5, 
   "Sq3comment" : null
 }
]

我想提取评论'字段,但仅反映结果中不为空的字段。

我可以用查询逐个提取字段(Sq1comment; Sq2comment,Sq3comment)

db.collection.find({ "Sq1comment": { $not: { $type: 10 } })

输出为:

[{ "_id": "1",
  "Sq1comment" : "In general you aaaaaa.", 
  "Sq3comment" : "A person bbbbb."
 }]

或者如果我进行汇总$项目的评论'字段中的所有空值都在那里:

db.collection.aggregate([{$project: 
   { "Sq1comment": "$Sq1comment",
     "Sq2comment": "$Sq2comment",
     "Sq3comment": "$Sq3comment"
   } }])

输出为:

[{ "_id": "1",
  "Sq1comment" : "In general you aaaaaa.", 
  "S2comment" : null, 
  "Sq3comment" : "A person bbbbb."
 },
 { "_id": "2",
   "Sq1comment" : "In general you cc.", 
   "S2comment" : "A story ff", 
   "Sq3comment" : null
 }
]

我希望项目数据显示所有注释字段,但只显示非空的条目。因此排除空字段是聚合。

1 个答案:

答案 0 :(得分:0)

也许您可以先尝试$unwind,然后再尝试$group以获得所需的结果。

赞:

{
  $unwind:
    {
      path: <field path>,
      includeArrayIndex: <string>,
      preserveNullAndEmptyArrays: <boolean>
    }
}

preserveNullAndEmptyArrays将有助于排除空值。

更多访问链接:

https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

https://docs.mongodb.com/manual/reference/operator/aggregation/group/