mysql group sum concat 等转 mongo 查询语句 concat 拼接不对。

2019-11-12 16:35:52 +08:00
 coderabbit

从来没用过 mongodb 转写不熟悉现在遇到如下情况 mysql 语句

SELECT `*`,GROUP_CONCAT(`invoice_number`) as `invoice_number_all`,ROUND(SUM(`invoice_amount`)/100,2) as `invoice_amount_all`,ROUND(SUM(`premium_amount`)/100,2) as `premium_amount_all` FROM `t_invoice` 
WHERE `id` != 0
GROUP BY `insurer_id`,`region_id`,`invoice_company_id`,`data_type`,`invoice_date`,`invoice_remark` 
ORDER BY `invoice_date` DESC LIMIT 0,15

mysql concat 拼接结果:

mongodb 查询语句

db.t_invoice.aggregate(
	{
		"$group": {
			_id: {
				insurer_id:"$insurer_id", 
				region_id: "$region_id", 
				invoice_company_id:"$invoice_company_id",
				data_type: "$data_type",
				invoice_date: "$invoice_date",
				invoice_remark: "$invoice_remark",
			},
			count:{$sum:1},
			"create_by": {"$first": "$create_by"},
			"invoice_date": {"$first": {$dateToString: {format: "%Y-%m-%d", "date": {"$add": [new Date(0), {"$multiply" : ["$invoice_date", 1000]}]}}}},
			"invoice_amount": {"$sum": {"$divide": ["$invoice_amount", 100]}},
			"invoice_number": {"$first": {"$concat": ["$invoice_number", "-"]}},
			"invoice_code": {"$first": "$invoice_code"},
			"invoice_company_name": {"$first": "$invoice_company_name"},
			"insurer_name": {"$first": "$insurer_name"},
			"premium_amount": {"$sum": "$premium_amount"},
			"region_name": {"$first": "$region_name"},		
			"invoice_remark": {"$first": "$invoice_remark"},		
		}
	}
)

mongo 查询拼接结果

结果很悲剧 无论我用 concat concatArrays 它都不是把分组里的拿出来,而是只拿一个,如何才能像 mysql 一样拿出分组后的结果来拼接呢?

12961 次点击
所在节点    MongoDB
2 条回复
reus
2019-11-12 17:55:32 +08:00
谁做这种决定的,谁傻逼。好好的 sql 不用,用残疾的查询语言。真那么喜欢 json,就该换 postgresql
coderabbit
2019-11-12 19:03:16 +08:00
@reus 看文档解决了,拿他只是做二级数据库的,没接触过,正好要求用,就试试了…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/618865

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX