为什么会有这么多坑
1. Java会把 id:String = "合法ObjectId" 好心好意的 转为 _id:ObjectId 类型。
2. 为了避免第1点, 我定义了一个 HashMap, 里面放 id 它就不会转了,但是下面代码报错:
mor.sys.user!!
.UpdateById("58f6cdfe2b3fe4673b897061")
.where("roles.id" pair "abc4")
.set("roles.$.name" pair "6644")
.exec();
user 下面有 roles 集合, 如果使用 Map 报错, 不使用 Map,使用对象集合, 就没有事。 这帮SB,从Map中反射 id 属性, 我添加了 id 属性,也不行。
3. Update 语句中 "id" pair String值, Java 会把 id 转为 _id , String值会转为 ObjectId
但是子属性就不会!!!
role.id pair String值,就傻傻的报错。
4. 顺序很重要!
db.qRCodeTagInfo.aggregate(
[
{ "$match" : { "corpId" : "58fc10252b3fe46746a93fbe"}}
,
{ "$group" : { "_id" : { "corpId" : "$corpId" , "createBy" : "$createBy" , "action" : "$action" , "tag" : "$tag"}}}
] )
$match 写在前面, 说明,先进行查询。
$match 写在后面, 说明,后执行过滤。 写在后面时,要写为:
{ "$match" : { "_id.corpId" : "58fc10252b3fe46746a93fbe"}}
否则找不到 corpId , 因为返回的结果只有一个 _id列, 其它是聚合列。