$split并将对象数组的第一个元素作为新对象返回到mongodb查询中的主集合

jfewjypa  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(283)

我有一个包含许多对象的集合。我需要从现有对象的数据在main中创建一个新对象,并将引用ID添加到现有对象。请帮助。

  1. {
  2. "_id": "officeLocation",
  3. "data": [
  4. {
  5. "_id": ObjectId("2233),
  6. "key": "APAC - ANZ"
  7. "value": "APAC - ANZ"
  8. },
  9. {
  10. "_id": ObjectId("21323),
  11. "key": "APAC - Japan"
  12. "value": "APAC - Japan"
  13. },
  14. {
  15. "_id": ObjectId("2221233),
  16. "key": "EMEA - CE - Benelux - Brussels"
  17. "value": "EMEA - CE - Benelux - Brussels"
  18. },
  19. {
  20. "_id": ObjectId("2221233),
  21. "key": "EMEA - CE - Benelux - London"
  22. "value": "EMEA - CE - Benelux - London"
  23. },
  24. ]
  25. }

字符串
像这样,我需要拆分key值的第一部分,并将新的Object添加到名为region的集合中,并将它的id作为引用id添加到现有的officeLocation中。

预期结果:

  1. {
  2. "_id": regions,
  3. "data" [
  4. {
  5. "_id" : ObjecteId(123),
  6. "key" : APAC
  7. "value": APAC
  8. },
  9. {
  10. "_id" : ObjectId(1234),
  11. "key" : EMEA
  12. "value": EMEA
  13. }
  14. ]
  15. },
  16. {
  17. "_id": "officeLocation",
  18. "data": [
  19. {
  20. "_id": ObjectId("2233),
  21. "key": "APAC - ANZ"
  22. "value": "APAC - ANZ"
  23. "referenceId" : ObjectId(123)
  24. },
  25. {
  26. "_id": ObjectId("21323),
  27. "key": "APAC - Japan"
  28. "value": "APAC - Japan",
  29. "referenceId" : ObjectId(123)
  30. },
  31. {
  32. "_id": ObjectId("2221233),
  33. "key": "EMEA - CE - Benelux - Brussels"
  34. "value": "EMEA - CE - Benelux - Brussels",
  35. "referenceId" : ObjectId(1234)
  36. },
  37. {
  38. "_id": ObjectId("2221233),
  39. "key": "EMEA - CE - Benelux - London"
  40. "value": "EMEA - CE - Benelux - London",
  41. "referenceId" : ObjectId(1234)
  42. },
  43. ]
  44. }


首先需要使用正则表达式进行拆分--使用mongodb查询从键中取出正确的区域。
请帮帮我

qlvxas9a

qlvxas9a1#

只需要$split和' - '作为前缀,$first就可以得到区域。

  1. db.collection.aggregate([
  2. {
  3. "$match": {
  4. "_id": "officeLocation"
  5. }
  6. },
  7. {
  8. "$unwind": "$data"
  9. },
  10. {
  11. "$set": {
  12. "region": {
  13. "$first": {
  14. "$split": [
  15. "$data.key",
  16. " - "
  17. ]
  18. }
  19. }
  20. }
  21. },
  22. {
  23. "$group": {
  24. "_id": "regions",
  25. "regions": {
  26. "$addToSet": {
  27. "_id": new ObjectId(),
  28. "key": "$region",
  29. "value": "$region"
  30. }
  31. }
  32. }
  33. },
  34. {
  35. "$merge": {
  36. "into": "collection",
  37. "on": "_id"
  38. }
  39. }
  40. ])

字符串
Mongo Playground

展开查看全部

相关问题