经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MongoDB » 查看文章
记一次mongodb聚合查询
来源:cnblogs  作者:du_blog  时间:2019/4/16 8:47:22  对本文有异议

  先说一下场景,产品中用到了简单的表单构造器,开始提供了一系列的控件,例如单行文本框、多行文本框、单选、复选、时间等,之后你可以拖拽控件自己组装你想要的表单……网上有很多的表单构造器,这里就不细说了,可能功能有多有少,但是原理类似。因为这种表单的这种实现方式,我们不单单要存储表单的真实数据,还要存储对应表单的配置数据来渲染表单的样子。这里不细说配置相关的事情,细说一下表单数据的存储和查询。

  对于一条记录有很多共有属性:主键ID、创建用户ID、创建时间、表单ID(用于读取表单配置)等一些业务数据,这里着重说一下表单ID也就是下面演示中提到的TableCode,我们这种存储方式可以将业务上的多种表都存储在现在的一张表中,所以必须要一个字段来区分这条记录存储的具体是什么信息,以方便在查询时找到具体的数据;还有一些就是具体的表单项了。我们采用的是Mongodb存储,不用想肯定是复杂结构了,数组或者键值对对象……也不知道什么原因了,我们采用的是数组,这里记作FormItems,FormItems列中存储着所有的表单项,具体的看一下数据库的存储结构:

  1. {
  2. "_id" : "1",
  3. "CreateUserName" : "ddz1",
  4. "CreateDate" : "2018-02-07",
  5. "FormItems" : [
  6. {
  7. "key" : "CarBrand",
  8. "value" : "红旗"
  9. },
  10. {
  11. "key" : "VehicleType",
  12. "value" : "H7"
  13. },
  14. {
  15. "key" : "CarNum",
  16. "value" : "京A00001"
  17. },
  18. {
  19. "key" : "PurchaseDate",
  20. "value" : "2019-01-01"
  21. }
  22. ],
  23. "TableCode" : "CarInfo"
  24. }

  上面看到是一个缩减版的结构(为了方便演示),简单的介绍一下:TableCode-表单名称,FormItems数组中存储着所有的表单项,key本来是唯一值,这里仅仅为了演示所以如此,value就是具体的表单项的值了。查询演示用到了三张表,第一张表如上,车辆信息表:车牌子、车型、牌照、购买日期等;车辆维修表:车辆ID、花费、内容;出车记录表:车辆ID、收入、里程、备注。首先插入一些数据:

  1. try{
  2. db.t1.insertMany([{
  3. "_id": "1",
  4. "CreateUserName": "ddz1",
  5. "CreateDate": "2018-02-07",
  6. "FormItems": [{
  7. "key": "CarBrand",
  8. "value": "红旗"
  9. },
  10. {
  11. "key": "VehicleType",
  12. "value": "H7"
  13. },
  14. {
  15. "key": "CarNum",
  16. "value": "京A00001"
  17. },
  18. {
  19. "key": "PurchaseDate",
  20. "value": "2019-01-01"
  21. }],
  22. "TableCode": "CarInfo"
  23. },{
  24. "_id": "2",
  25. "CreateUserName": "ddz1",
  26. "CreateDate": "2018-02-08",
  27. "FormItems": [{
  28. "key": "CarBrand",
  29. "value": "红旗"
  30. },
  31. {
  32. "key": "VehicleType",
  33. "value": "H5"
  34. },
  35. {
  36. "key": "CarNum",
  37. "value": "京A00002"
  38. },
  39. {
  40. "key": "PurchaseDate",
  41. "value": "2019-02-01"
  42. }],
  43. "TableCode": "CarInfo"
  44. },{
  45. "_id": "3",
  46. "CreateUserName": "ddz1",
  47. "CreateDate": "2018-02-09",
  48. "FormItems": [{
  49. "key": "CarBrand",
  50. "value": "红旗"
  51. },
  52. {
  53. "key": "VehicleType",
  54. "value": "L5"
  55. },
  56. {
  57. "key": "CarNum",
  58. "value": "京A00003"
  59. },
  60. {
  61. "key": "PurchaseDate",
  62. "value": "2019-03-01"
  63. }],
  64. "TableCode": "CarInfo"
  65. },
  66. {
  67. "_id": "4",
  68. "CreateUserName": "ddz1",
  69. "CreateDate": "2018-02-10",
  70. "FormItems": [{
  71. "key": "CarBrand",
  72. "value": "长城"
  73. },
  74. {
  75. "key": "VehicleType",
  76. "value": "哈弗H6"
  77. },
  78. {
  79. "key": "CarNum",
  80. "value": "京A00004"
  81. },
  82. {
  83. "key": "PurchaseDate",
  84. "value": "2018-03-01"
  85. }],
  86. "TableCode": "CarInfo"
  87. },{
  88. "_id": "5",
  89. "CreateUserName": "ddz1",
  90. "CreateDate": "2018-02-09",
  91. "FormItems": [{
  92. "key": "CarBrand",
  93. "value": "长城"
  94. },
  95. {
  96. "key": "VehicleType",
  97. "value": "哈弗H5"
  98. },
  99. {
  100. "key": "CarNum",
  101. "value": "京A00005"
  102. },
  103. {
  104. "key": "PurchaseDate",
  105. "value": "2018-03-01"
  106. }],
  107. "TableCode": "CarInfo"
  108. },{
  109. "_id": "6",
  110. "CreateUserName": "ddz1",
  111. "CreateDate": "2018-03-09",
  112. "FormItems": [{
  113. "key": "CarBrand",
  114. "value": "长城"
  115. },
  116. {
  117. "key": "VehicleType",
  118. "value": "哈弗H4"
  119. },
  120. {
  121. "key": "CarNum",
  122. "value": "京A00006"
  123. },
  124. {
  125. "key": "PurchaseDate",
  126. "value": "2018-03-01"
  127. }],
  128. "TableCode": "CarInfo"
  129. },{
  130. "_id": "7",
  131. "CreateUserName": "ddz100",
  132. "CreateDate": "2018-06-06",
  133. "FormItems": [{
  134. "key": "CarId",
  135. "value": "1"
  136. },
  137. {
  138. "key": "Cost",
  139. "value": 100
  140. },
  141. {
  142. "key": "Contents",
  143. "value": "喷漆"
  144. }],
  145. "TableCode": "MaintenanceRecord"
  146. },{
  147. "_id": "8",
  148. "CreateUserName": "ddz100",
  149. "CreateDate": "2018-08-06",
  150. "FormItems": [{
  151. "key": "CarId",
  152. "value": "1"
  153. },
  154. {
  155. "key": "Cost",
  156. "value": 25
  157. },
  158. {
  159. "key": "Contents",
  160. "value": "洗车"
  161. }],
  162. "TableCode": "MaintenanceRecord"
  163. },{
  164. "_id": "9",
  165. "CreateUserName": "ddz101",
  166. "CreateDate": "2018-06-03",
  167. "FormItems": [{
  168. "key": "CarId",
  169. "value": "2"
  170. },
  171. {
  172. "key": "Cost",
  173. "value": 1560
  174. },
  175. {
  176. "key": "Contents",
  177. "value": "换轮胎"
  178. }],
  179. "TableCode": "MaintenanceRecord"
  180. },{
  181. "_id": "10",
  182. "CreateUserName": "ddz102",
  183. "CreateDate": "2018-06-26",
  184. "FormItems": [{
  185. "key": "CarId",
  186. "value": "3"
  187. },
  188. {
  189. "key": "Cost",
  190. "value": 36
  191. },
  192. {
  193. "key": "Contents",
  194. "value": "爆胎"
  195. }],
  196. "TableCode": "MaintenanceRecord"
  197. },{
  198. "_id": "11",
  199. "CreateUserName": "ddz103",
  200. "CreateDate": "2018-09-08",
  201. "FormItems": [{
  202. "key": "CarId",
  203. "value": "3"
  204. },
  205. {
  206. "key": "Cost",
  207. "value": 1630
  208. },
  209. {
  210. "key": "Contents",
  211. "value": "换加速器"
  212. }],
  213. "TableCode": "MaintenanceRecord"
  214. },{
  215. "_id": "12",
  216. "CreateUserName": "ddz10",
  217. "CreateDate": "2018-06-06",
  218. "FormItems": [{
  219. "key": "CarId",
  220. "value": "1"
  221. },
  222. {
  223. "key": "Income",
  224. "value": 106
  225. },
  226. {
  227. "key": "Mileage",
  228. "value": 50
  229. },
  230. {
  231. "key": "Remarks",
  232. "value": "123"
  233. }],
  234. "TableCode": "DispatchRecord"
  235. },{
  236. "_id": "13",
  237. "CreateUserName": "ddz11",
  238. "CreateDate": "2018-06-16",
  239. "FormItems": [{
  240. "key": "CarId",
  241. "value": "1"
  242. },
  243. {
  244. "key": "Income",
  245. "value": 250
  246. },
  247. {
  248. "key": "Mileage",
  249. "value": 100
  250. },
  251. {
  252. "key": "Remarks",
  253. "value": "123"
  254. }],
  255. "TableCode": "DispatchRecord"
  256. },{
  257. "_id": "14",
  258. "CreateUserName": "ddz12",
  259. "CreateDate": "2018-06-16",
  260. "FormItems": [{
  261. "key": "CarId",
  262. "value": "2"
  263. },
  264. {
  265. "key": "Income",
  266. "value": 1000
  267. },
  268. {
  269. "key": "Mileage",
  270. "value": 630
  271. },
  272. {
  273. "key": "Remarks",
  274. "value": "2345sfgfg"
  275. }],
  276. "TableCode": "DispatchRecord"
  277. },{
  278. "_id": "15",
  279. "CreateUserName": "ddz12",
  280. "CreateDate": "2018-08-16",
  281. "FormItems": [{
  282. "key": "CarId",
  283. "value": "3"
  284. },
  285. {
  286. "key": "Income",
  287. "value": 1213
  288. },
  289. {
  290. "key": "Mileage",
  291. "value": 569
  292. },
  293. {
  294. "key": "Remarks",
  295. "value": "12asdfasdfasdf3"
  296. }],
  297. "TableCode": "DispatchRecord"
  298. }]);
  299. }catch(e){
  300. print(e);
  301. }
View Code

  这种存储方式有一定的好处,但是弊端也很明显:查询、排序等很费劲,如果服务器端以这样的方式返回客户端,客户端还得解析FormItems,非常不友好(感觉自己在给自己找麻烦)……所以我就想看看能不能在所有的查询操作之前,首先处理一下数据,将FormItems中的表单项都提到文档的最外层和公共字段一个层次,之后在进行查询排序似乎就简单点了,为了实现这个目标真是废了九牛二虎之力,道路相当坎坷,经历的时间也很长,不过最终好在找到一个例子解决了我们的问题:https://jira.mongodb.org/browse/SERVER-5947 。在此表示感谢,非常感谢……在这之后又遇到了一个问题就是:在关联查询时mongodb的处理方式是将所有的相关联的数据存储在一个属性中,因为我们所有的“表”都存在这一个表中,所以关联的也是这一张表,也就是关联自己查询,结果得到关联的数据还是没有处理之前的样子,相同的数据最后的结构都不一样,都不好意思返回客户端,这个问题比之前的问题更费劲……不知道度过了多少天,我的一个同事说弄出来了,我就有点……所以我也想尝试一下,最后废了半天劲儿终于弄出来,不知道和同事弄的一样不一样,这里只能吐槽mongodb你怎么能这样……看一下代码:

  1. db.getCollection('t1').aggregate([
  2. {$addFields:
  3. {
  4. FormValueObj:{
  5. $arrayToObject:{
  6. $map:
  7. {
  8. input: "$FormItems",
  9. as: "field",
  10. in: ["$$field.key","$$field.value"]
  11. }
  12. }
  13. }
  14. }
  15. },
  16. {
  17. $addFields:{
  18. "FormValueObj._id":"$_id",
  19. "FormValueObj.CreateUserName":"$CreateUserName",
  20. "FormValueObj.CreateDate":"$CreateDate",
  21. "FormValueObj.TableCode":"$TableCode"
  22. }
  23. },
  24. {
  25. $replaceRoot: { newRoot: "$FormValueObj" }
  26. },
  27. {
  28. $lookup:{
  29. from: "t1",
  30. localField: "_id",
  31. foreignField: "FormItems.value",
  32. as: "RelationData1"
  33. }
  34. },
  35. {
  36. $addFields:{
  37. RelationData1:{
  38. $map:
  39. {
  40. input: "$RelationData1",
  41. as: "tr",
  42. in: {
  43. $arrayToObject:{
  44. $map:
  45. {
  46. input:{
  47. $concatArrays: [
  48. [
  49. {key:"_id",value:"$$tr._id"},
  50. {key:"CreateUserName",value:"$$tr.CreateUserName"},
  51. {key:"CreateDate",value:"$$tr.CreateDate"},
  52. {key:"TableCode",value:"$$tr.TableCode"},
  53. ],
  54. "$$tr.FormItems" ]
  55. },
  56. as: "field",
  57. in: ["$$field.key","$$field.value"]
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }
  64. }
  65. ])
查询语句
  1. /* 1 */
  2. {
  3. "CarBrand" : "红旗",
  4. "VehicleType" : "H7",
  5. "CarNum" : "京A00001",
  6. "PurchaseDate" : "2019-01-01",
  7. "_id" : "1",
  8. "CreateUserName" : "ddz1",
  9. "CreateDate" : "2018-02-07",
  10. "TableCode" : "CarInfo",
  11. "RelationData1" : [
  12. {
  13. "_id" : "7",
  14. "CreateUserName" : "ddz100",
  15. "CreateDate" : "2018-06-06",
  16. "TableCode" : "MaintenanceRecord",
  17. "CarId" : "1",
  18. "Cost" : 100.0,
  19. "Contents" : "喷漆"
  20. },
  21. {
  22. "_id" : "8",
  23. "CreateUserName" : "ddz100",
  24. "CreateDate" : "2018-08-06",
  25. "TableCode" : "MaintenanceRecord",
  26. "CarId" : "1",
  27. "Cost" : 25.0,
  28. "Contents" : "洗车"
  29. },
  30. {
  31. "_id" : "12",
  32. "CreateUserName" : "ddz10",
  33. "CreateDate" : "2018-06-06",
  34. "TableCode" : "DispatchRecord",
  35. "CarId" : "1",
  36. "Income" : 106.0,
  37. "Mileage" : 50.0,
  38. "Remarks" : "123"
  39. },
  40. {
  41. "_id" : "13",
  42. "CreateUserName" : "ddz11",
  43. "CreateDate" : "2018-06-16",
  44. "TableCode" : "DispatchRecord",
  45. "CarId" : "1",
  46. "Income" : 250.0,
  47. "Mileage" : 100.0,
  48. "Remarks" : "123"
  49. }
  50. ]
  51. }
  52. /* 2 */
  53. {
  54. "CarBrand" : "红旗",
  55. "VehicleType" : "H5",
  56. "CarNum" : "京A00002",
  57. "PurchaseDate" : "2019-02-01",
  58. "_id" : "2",
  59. "CreateUserName" : "ddz1",
  60. "CreateDate" : "2018-02-08",
  61. "TableCode" : "CarInfo",
  62. "RelationData1" : [
  63. {
  64. "_id" : "9",
  65. "CreateUserName" : "ddz101",
  66. "CreateDate" : "2018-06-03",
  67. "TableCode" : "MaintenanceRecord",
  68. "CarId" : "2",
  69. "Cost" : 1560.0,
  70. "Contents" : "换轮胎"
  71. },
  72. {
  73. "_id" : "14",
  74. "CreateUserName" : "ddz12",
  75. "CreateDate" : "2018-06-16",
  76. "TableCode" : "DispatchRecord",
  77. "CarId" : "2",
  78. "Income" : 1000.0,
  79. "Mileage" : 630.0,
  80. "Remarks" : "2345sfgfg"
  81. }
  82. ]
  83. }
  84. /* 3 */
  85. {
  86. "CarBrand" : "红旗",
  87. "VehicleType" : "L5",
  88. "CarNum" : "京A00003",
  89. "PurchaseDate" : "2019-03-01",
  90. "_id" : "3",
  91. "CreateUserName" : "ddz1",
  92. "CreateDate" : "2018-02-09",
  93. "TableCode" : "CarInfo",
  94. "RelationData1" : [
  95. {
  96. "_id" : "10",
  97. "CreateUserName" : "ddz102",
  98. "CreateDate" : "2018-06-26",
  99. "TableCode" : "MaintenanceRecord",
  100. "CarId" : "3",
  101. "Cost" : 36.0,
  102. "Contents" : "爆胎"
  103. },
  104. {
  105. "_id" : "11",
  106. "CreateUserName" : "ddz103",
  107. "CreateDate" : "2018-09-08",
  108. "TableCode" : "MaintenanceRecord",
  109. "CarId" : "3",
  110. "Cost" : 1630.0,
  111. "Contents" : "换加速器"
  112. },
  113. {
  114. "_id" : "15",
  115. "CreateUserName" : "ddz12",
  116. "CreateDate" : "2018-08-16",
  117. "TableCode" : "DispatchRecord",
  118. "CarId" : "3",
  119. "Income" : 1213.0,
  120. "Mileage" : 569.0,
  121. "Remarks" : "12asdfasdfasdf3"
  122. }
  123. ]
  124. }
  125. /* 4 */
  126. {
  127. "CarBrand" : "长城",
  128. "VehicleType" : "哈弗H6",
  129. "CarNum" : "京A00004",
  130. "PurchaseDate" : "2018-03-01",
  131. "_id" : "4",
  132. "CreateUserName" : "ddz1",
  133. "CreateDate" : "2018-02-10",
  134. "TableCode" : "CarInfo",
  135. "RelationData1" : []
  136. }
  137. /* 5 */
  138. {
  139. "CarBrand" : "长城",
  140. "VehicleType" : "哈弗H5",
  141. "CarNum" : "京A00005",
  142. "PurchaseDate" : "2018-03-01",
  143. "_id" : "5",
  144. "CreateUserName" : "ddz1",
  145. "CreateDate" : "2018-02-09",
  146. "TableCode" : "CarInfo",
  147. "RelationData1" : []
  148. }
  149. /* 6 */
  150. {
  151. "CarBrand" : "长城",
  152. "VehicleType" : "哈弗H4",
  153. "CarNum" : "京A00006",
  154. "PurchaseDate" : "2018-03-01",
  155. "_id" : "6",
  156. "CreateUserName" : "ddz1",
  157. "CreateDate" : "2018-03-09",
  158. "TableCode" : "CarInfo",
  159. "RelationData1" : []
  160. }
  161. /* 7 */
  162. {
  163. "CarId" : "1",
  164. "Cost" : 100.0,
  165. "Contents" : "喷漆",
  166. "_id" : "7",
  167. "CreateUserName" : "ddz100",
  168. "CreateDate" : "2018-06-06",
  169. "TableCode" : "MaintenanceRecord",
  170. "RelationData1" : []
  171. }
  172. /* 8 */
  173. {
  174. "CarId" : "1",
  175. "Cost" : 25.0,
  176. "Contents" : "洗车",
  177. "_id" : "8",
  178. "CreateUserName" : "ddz100",
  179. "CreateDate" : "2018-08-06",
  180. "TableCode" : "MaintenanceRecord",
  181. "RelationData1" : []
  182. }
  183. /* 9 */
  184. {
  185. "CarId" : "2",
  186. "Cost" : 1560.0,
  187. "Contents" : "换轮胎",
  188. "_id" : "9",
  189. "CreateUserName" : "ddz101",
  190. "CreateDate" : "2018-06-03",
  191. "TableCode" : "MaintenanceRecord",
  192. "RelationData1" : []
  193. }
  194. /* 10 */
  195. {
  196. "CarId" : "3",
  197. "Cost" : 36.0,
  198. "Contents" : "爆胎",
  199. "_id" : "10",
  200. "CreateUserName" : "ddz102",
  201. "CreateDate" : "2018-06-26",
  202. "TableCode" : "MaintenanceRecord",
  203. "RelationData1" : []
  204. }
  205. /* 11 */
  206. {
  207. "CarId" : "3",
  208. "Cost" : 1630.0,
  209. "Contents" : "换加速器",
  210. "_id" : "11",
  211. "CreateUserName" : "ddz103",
  212. "CreateDate" : "2018-09-08",
  213. "TableCode" : "MaintenanceRecord",
  214. "RelationData1" : []
  215. }
  216. /* 12 */
  217. {
  218. "CarId" : "1",
  219. "Income" : 106.0,
  220. "Mileage" : 50.0,
  221. "Remarks" : "123",
  222. "_id" : "12",
  223. "CreateUserName" : "ddz10",
  224. "CreateDate" : "2018-06-06",
  225. "TableCode" : "DispatchRecord",
  226. "RelationData1" : []
  227. }
  228. /* 13 */
  229. {
  230. "CarId" : "1",
  231. "Income" : 250.0,
  232. "Mileage" : 100.0,
  233. "Remarks" : "123",
  234. "_id" : "13",
  235. "CreateUserName" : "ddz11",
  236. "CreateDate" : "2018-06-16",
  237. "TableCode" : "DispatchRecord",
  238. "RelationData1" : []
  239. }
  240. /* 14 */
  241. {
  242. "CarId" : "2",
  243. "Income" : 1000.0,
  244. "Mileage" : 630.0,
  245. "Remarks" : "2345sfgfg",
  246. "_id" : "14",
  247. "CreateUserName" : "ddz12",
  248. "CreateDate" : "2018-06-16",
  249. "TableCode" : "DispatchRecord",
  250. "RelationData1" : []
  251. }
  252. /* 15 */
  253. {
  254. "CarId" : "3",
  255. "Income" : 1213.0,
  256. "Mileage" : 569.0,
  257. "Remarks" : "12asdfasdfasdf3",
  258. "_id" : "15",
  259. "CreateUserName" : "ddz12",
  260. "CreateDate" : "2018-08-16",
  261. "TableCode" : "DispatchRecord",
  262. "RelationData1" : []
  263. }
查询结果

  你可能看到了查询语句太长了,这还是最基本的,幸好3.4之后提供了视图的功能,我们可以创建一个视图,弄成我们想要的样子:

  1. db.createView("t1view","t1",[
  2. {$addFields:
  3. {
  4. FormValueObj:{
  5. $arrayToObject:{
  6. $map:
  7. {
  8. input: "$FormItems",
  9. as: "field",
  10. in: ["$$field.key","$$field.value"]
  11. }
  12. }
  13. }
  14. }
  15. },
  16. {
  17. $addFields:{
  18. "FormValueObj._id":"$_id",
  19. "FormValueObj.CreateUserName":"$CreateUserName",
  20. "FormValueObj.CreateDate":"$CreateDate",
  21. "FormValueObj.TableCode":"$TableCode"
  22. }
  23. },
  24. {
  25. $replaceRoot: { newRoot: "$FormValueObj" }
  26. }
  27. ])
创建视图

  之后我们就是在视图中查询了

  1. db.getCollection('t1view').aggregate([
  2. {$match:{_id:"1"}},
  3. {
  4. $lookup:{
  5. from: "t1view",
  6. localField: "_id",
  7. foreignField: "CarId",
  8. as: "RelationData1"
  9. }
  10. }
  11. ])
视图查询
  1. /* 1 */
  2. {
  3. "CarBrand" : "红旗",
  4. "VehicleType" : "H7",
  5. "CarNum" : "京A00001",
  6. "PurchaseDate" : "2019-01-01",
  7. "_id" : "1",
  8. "CreateUserName" : "ddz1",
  9. "CreateDate" : "2018-02-07",
  10. "TableCode" : "CarInfo",
  11. "RelationData1" : [
  12. {
  13. "CarId" : "1",
  14. "Cost" : 100.0,
  15. "Contents" : "喷漆",
  16. "_id" : "7",
  17. "CreateUserName" : "ddz100",
  18. "CreateDate" : "2018-06-06",
  19. "TableCode" : "MaintenanceRecord"
  20. },
  21. {
  22. "CarId" : "1",
  23. "Cost" : 25.0,
  24. "Contents" : "洗车",
  25. "_id" : "8",
  26. "CreateUserName" : "ddz100",
  27. "CreateDate" : "2018-08-06",
  28. "TableCode" : "MaintenanceRecord"
  29. },
  30. {
  31. "CarId" : "1",
  32. "Income" : 106.0,
  33. "Mileage" : 50.0,
  34. "Remarks" : "123",
  35. "_id" : "12",
  36. "CreateUserName" : "ddz10",
  37. "CreateDate" : "2018-06-06",
  38. "TableCode" : "DispatchRecord"
  39. },
  40. {
  41. "CarId" : "1",
  42. "Income" : 250.0,
  43. "Mileage" : 100.0,
  44. "Remarks" : "123",
  45. "_id" : "13",
  46. "CreateUserName" : "ddz11",
  47. "CreateDate" : "2018-06-16",
  48. "TableCode" : "DispatchRecord"
  49. }
  50. ]
  51. }
视图查询结果

  这样在操作就简单多了,还避免了上面的第二个问题,??????,不知道你有没有发现一个问题,在上面的查询结果中“RelationData1”中冗余了车辆维护表和车辆出车记录的所有相关记录,这不是我们想要的,我们想要的是RelationData1是相关的“车辆维护记录”,RelationData2是相关的“车辆出车记录”,出现这种问题的原因是关联查询时,关联的表不允许过滤,3.4版本之前就这样了,不知道大神们有没有好的办法,我只能用升级来解决了,3.6之后就可以了……

  暂时就记到这里吧!有时间在补充。

原文链接:http://www.cnblogs.com/du-blog/p/10713312.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号