Caldera500
Caldera500

Reputation: 149

Copy first array value to another field in MongoDB

I have an old list of products that store the descriptions in an array at index [0]. The model is set up as a string. So my plan is to extract that value and add it to a temporary field. Step 2 would be to take that value and copy it to the original field. This is the 'wrong' product I want to fix.

{_id : 1 , pDescription : ['great product']},
{_id : 2 , pDescription : ['another product']}

All I want to is to change the array to a string like this:

{_id : 1 , pDescription : 'great product'},
{_id : 2 , pDescription : 'another product'}

I have tried this to create the temporary description:

    Products.aggregate([
    {
        $match: {
            pDescription: {
                $type: "array"
            }
        }
        },
    {
        $set: {
            pDescTemp: {
                $first: "$pDescription"
            }
        }
            }
        ]).exec((err, r) => {
       // do stuff here
   });

The command works fine without the $first command. The error reads: MongoError: Unrecognized expression '$first'

Any tips on how to fix this are appreciated! Thanks!

Upvotes: 2

Views: 947

Answers (1)

codemonkey
codemonkey

Reputation: 7905

I believe this is what you need to update your pDescription field to be equal to the first element of the array already stored as pDescription:

db.Products.updateMany({},
[
  {
    $set: {
      pDescription: {
        $arrayElemAt: [
          "$pDescription",
          0
        ]
      }
    }
  }
])

Upvotes: 2

Related Questions