如果我有文档并且我正在聚合并且我想细分一个字段,例如:
{data: {'date_created': '2011-01-01', 'title': 'abc'}, 'owner': 'Jim'}
{data: {'date_created': '2011-05-01', 'title': 'def'}, 'owner': 'Bob'}
{data: {'date_created': '2011-03-01', 'title': 'ghi'}, 'owner': 'Jim'}
{data: {'date_created': '2011-03-01', 'title': ''}, 'owner': 'Sam'}
并且我想聚合以便我只获取在某个日期之前创建的标题或返回一个空列表,我将如何构建聚合管道?
所以期望的输出是:
{owner: "Jim", titles: ["abc", "def"],
owner: "Bob", titles: [],
owner: "Sam", titles: []}
我有一个聚合管道,类似于:
lookup => unwind =>
{'$match':
{'$or': [{'data.date_created': {'$lte': requested_date}}, {'data.title': {'$exists': False}}]}}}
但我无法弄清楚如何将创建日期在所需时间之后的数据转换为空白,因此它将与空白标题分组。
希望这可以帮助。您可以根据日期进行条件推送,然后从 titles 数组中过滤掉空白项。
db.collection.aggregate([
{"$group":{
_id:"$owner",titles:{
$push: { $cond:[
{ $lte: [ "$data.date_created", "2011-03-01" ]},"$data.title",""
]
}
}
}
},
{
$project: {
_id:0,
owner : "$_id",
titles: {
$filter: {
input: "$titles",
as: "titles",
cond: { $ne: [ "$$titles", "" ] }
}
}
}
}
])
结果 :
{ "titles" : [ ], "owner" : "Bob" }
{ "titles" : [ "abc", "ghi" ], "owner" : "Jim" }
{ "titles" : [ ], "owner" : "Sam" }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句