Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting CoreMongooseArray instead of normal array

I have this schema:

var orderSchema = new mongoose.Schema({
  history: [{
    "type": {
      type: String,
      enum: [
        'ORDER_HISTORY_DRIVER_DETAILS',
        'ORDER_HISTORY_LOADING',
        'ORDER_HISTORY_LOCATION',
        'ORDER_HISTORY_UNLOADING'
      ],
      required: true
    },
    date: {
      type: Date
    },
    state: {
      type: String,
      enum: [
        'ORDER_HISTORY_STEP_STATE_COMPLETED',
        'ORDER_HISTORY_STEP_STATE_CURRENT',
        'ORDER_HISTORY_STEP_STATE_FUTURE',
      ],
      default: 'ORDER_HISTORY_STEP_STATE_FUTURE',
      required: true
    }
  }]
})

At one point, I need to remove all subdocuments that have a type of "ORDER_HISTORY_LOCATION", so I'm running this:

let result = await Order.findOneAndUpdate(
  {orderId: req.params.orderId},
  {
    $pull: {
      history: {type: "ORDER_HISTORY_LOCATION"}
    }
  }, {new: true}
);

When i log "result.history" i get this:

CoreMongooseArray [
{ state: 'ORDER_HISTORY_STEP_STATE_CURRENT',
  _id: 5caf8a41641e6717d835483d,
  type: 'ORDER_HISTORY_DRIVER_DETAILS' },
{ state: 'ORDER_HISTORY_STEP_STATE_FUTURE',
  _id: 5caf8a41641e6717d835483c,
  type: 'ORDER_HISTORY_LOADING',
  date: 2019-05-08T09:00:00.000Z },
{ state: 'ORDER_HISTORY_STEP_STATE_FUTURE',
  _id: 5caf8a41641e6717d835483b,
  type: 'ORDER_HISTORY_LOADING',
  date: 2019-05-09T09:00:00.000Z },
{ state: 'ORDER_HISTORY_STEP_STATE_FUTURE',
  _id: 5caf8a41641e6717d8354837,
  type: 'ORDER_HISTORY_UNLOADING',
  date: 2019-05-13T09:00:00.000Z } ]

What is this "CoreMongooseArray"? I can't do anything with it. I also can't find any documentation on it.

like image 350
Andi Aleksandrov Avatar asked Apr 11 '19 19:04

Andi Aleksandrov


2 Answers

CoreMongooseArray seems to be inheriting the Array type and has almost the same behavior.

Source code (at the time of writting) : https://github.com/Automattic/mongoose/blob/3e523631daa48a910b5335c747b3e5d080966e6d/lib/types/core_array.js

In case you want to convert it to a simple array, just do this :

const history = Array.from(...result.history)

Beware, if this array contains objects, each object will have undesirable additional Mongoose properties, as they are Mongoose schemas documents. You will need to convert them into plain JavaScript objects :

const history = Array.from(...result.history).map(v => v.toJSON())

Hope it helps.

like image 77
Ilshidur Avatar answered Nov 12 '22 06:11

Ilshidur


This worked for me!

const history = Array.from([...result.history])
like image 23
Al Fahad Avatar answered Nov 12 '22 06:11

Al Fahad