Как раскрутить $ вложенный документ (не список) - PullRequest
2 голосов
/ 13 апреля 2020

Привет, у меня есть следующие документы в MongoDB:

{ "_id" : ObjectId("5e94200cc5d957a23aa24d3a"), "items" : { "Apple" : 5 } }
{ "_id" : ObjectId("5e942013c5d957a23aa24d3b"), "items" : { "Orange" : 6 } }
{ "_id" : ObjectId("5e94201dc5d957a23aa24d3c"), "items" : { "Pear" : 3 } }

Как мне изменить мои данные выше (используя $ unwind или что-нибудь еще лучше?) В следующий вывод?

{ "_id" : ObjectId("5e94200cc5d957a23aa24d3a"), "Apple" : 5 }
{ "_id" : ObjectId("5e942013c5d957a23aa24d3b"), "Orange" : 6 }
{ "_id" : ObjectId("5e94201dc5d957a23aa24d3c"), "Pear" : 3 }

Спасибо

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$mergeObjects": [
        "$items",
        { "_id": "$_id" }
      ]
    }
  }}
])

MongoPlayground

0 голосов
/ 13 апреля 2020

Нам нужно преобразовать object в list с оператором $ objectToArray (доступно с v3.4.4)

Попробуйте это:

db.collection.aggregate([
  {
    $addFields: {
      items: {
        $objectToArray: "$items"
      }
    }
  },
  {
    $unwind: "$items"
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          "$$ROOT",
          "$items"              
        ]
      }
    }
  },
  {
    $project: {
      items: 0
    }
  }
])

MongoPlayground

...