# Upgrade liana v7 mongoose

**URL:** <https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240>\
**Category:** Help me!\
**Created:** [May 3, 2023, 1:02pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240 "2023-05-03T13:02:42Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 3, 2023, 1:02pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/1 "2023-05-03T13:02:43Z")

</div>

Hi, I try to upgrade my “forest-express-mongoose”: “6.7.2”, to “forest-express-mongoose”: “7.9.4”,  
I followed this document [Upgrade to v7 - Developer guide](https://docs.forestadmin.com/documentation/how-tos/maintain/upgrade-notes-sql-mongodb/upgrade-to-v7)

But problem is I am getting some errors for some models like that

Cannot find the reference “Prices” on the model “Offers”.

because I was using my model just like below

```javascript
const OffersSchema = new mongoose.Schema({
  createdAt: {
    type: Date,
    default: Date.now
  },
  updatedAt: {
    type: Date,
  },
  isActive: {
    type: Boolean,
    default: true,
  },
  name: {
    type: String,
    required: true,
  },
  meal: {
    // meal type
    type: Schema.Types.ObjectId,
    ref: 'MealCategories',
  },
  prices: [{ type: Schema.Types.ObjectId, ref: 'Prices' }],
});

module.exports = mongoose.model('Offers', OffersSchema);

```

and I changed to

```javascript
module.exports = (mongoose, Mongoose) => {
const OffersSchema = Mongoose.Schema({
  createdAt: {
    type: Date,
    default: Date.now
  },
  updatedAt: {
    type: Date,
  },
  isActive: {
    type: Boolean,
    default: true,
  },
  name: {
    type: String,
    required: true,
  },

  schoolReference: {
    // school internal reference, ex: GE10
    type: String
  },
  room: {
    // room type
    type: Schema.Types.ObjectId,
    ref: 'RoomCategories',
  },
  meal: {
    // meal type
    type: Schema.Types.ObjectId,
    ref: 'MealCategories',
  },
  prices: [{ type: Schema.Types.ObjectId, ref: 'Prices' }],
});

return mongoose.model('Offers', OffersSchema);

}

```

like that so I am using some references for other models for that reason I think it is related but I don’t know solution so could u help me ?

---

<div class="post-metadata">

**Author:** ![anon39848301](https://avatars.discourse-cdn.com/v4/letter/a/b9e5f3/32.png) [@anon39848301](https://community.forestadmin.com/u/anon39848301)\
**Post date:** [May 3, 2023, 1:09pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/2 "2023-05-03T13:09:23Z")

</div>

Hey @codere 👋

Did you also update your `index.js` loading all your models as well ?

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 3, 2023, 1:12pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/3 "2023-05-03T13:12:09Z")

</div>

Hi @anon39848301 yes I did.

```javascript
const mongoose = require('mongoose');
const requireAll = require('require-all');
const fs = require('fs');
const path = require('path');
const config = require('../config/config');

const databasesConfiguration = require('../config/databases');

const models = {};
const connections = {};

const mongoUri = config.mongo.host;

mongoose.connect(mongoUri, {
  dbName: config.mongo.dbName,
  useCreateIndex: true,
  useNewUrlParser: true,
  poolSize: 2,
  useUnifiedTopology: true,
  useFindAndModify: false,
});

databasesConfiguration.forEach((databaseInfo) => {
  const connection = mongoose.createConnection(databaseInfo.connection.url, databaseInfo.connection.options);
  connections[databaseInfo.name] = connection;

  const modelsDir = databaseInfo.modelsDir || path.join(__dirname, databaseInfo.name);
  console.log(modelsDir);
  fs
    .readdirSync(modelsDir)
    .filter((file) => file.indexOf('.') !== 0 && file !== 'index.js')
    .forEach((file) => {
      try {
        const model = require(path.join(modelsDir, file))(connection, mongoose);
        console.log(model);
        models[model.modelName] = model;
        console.log(model);
      } catch (error) {
        console.error(`Model creation error: ${error}`);
      }
    });
});

models.objectMapping = mongoose;
models.connections = connections;

module.exports = models;

```

and this one databases.js

```javascript
const path = require('path');

const databaseOptions = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
};
module.exports = [{
  name: 'default',
  modelsDir: path.resolve(__dirname, '../models'),
  connection: {
    url: "mongodb://localhost:27017/db",
    options: { ...databaseOptions },
  },
}];

```

---

<div class="post-metadata">

**Author:** ![anon39848301](https://avatars.discourse-cdn.com/v4/letter/a/b9e5f3/32.png) [@anon39848301](https://community.forestadmin.com/u/anon39848301)\
**Post date:** [May 3, 2023, 1:21pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/4 "2023-05-03T13:21:34Z")

</div>

Could you also share the `Prices` models as well ?

Thanks in advance 🙏

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 3, 2023, 1:24pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/5 "2023-05-03T13:24:39Z")

</div>

```javascript
const mongoose = require('mongoose');
const { Schema } = mongoose;

module.exports = (mongoose, Mongoose) => {
  const PricesSchema = Mongoose.Schema({
    createdAt: {
      type: Date,
      default: Date.now
    },
    updatedAt: {
      type: Date,
    },
    season: {
      type: Schema.Types.ObjectId,
      ref: 'Seasons',
      require: true,
    },
    perNight: {
      type: Number,
    },
  });
 return mongoose.model('Prices', PricesSchema);
}

```

---

<div class="post-metadata">

**Author:** ![anon39848301](https://avatars.discourse-cdn.com/v4/letter/a/b9e5f3/32.png) [@anon39848301](https://community.forestadmin.com/u/anon39848301)\
**Post date:** [May 3, 2023, 1:30pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/6 "2023-05-03T13:30:11Z")

</div>

Well, I can’t spot anything obvious here. Can you finally share your project name so I can check your configuration on my end ?

---

<div class="post-metadata">

**Author:** ![Alban\_Bertolini](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/alban_bertolini/32/1077_2.png) [@Alban\_Bertolini](https://community.forestadmin.com/u/Alban_Bertolini)\
**Post date:** [May 4, 2023, 9:44am UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/7 "2023-05-04T09:44:36Z")

</div>

Hello,  
Did you try to replace `Schema.Types.ObjectId` by `Mongoose.Schema.Types.ObjectId`?

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 4, 2023, 11:02am UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/8 "2023-05-04T11:02:39Z")

</div>

> [@codere](#):
>
> ```javascript
> module.exports = (mongoose, Mongoose) => {
> const PricesSchema = Mongoose.Schema({
> createdAt: {
> type: Date,
> default: Date.now
> },
> updatedAt: {
> type: Date,
> },
> season: {
> type: Schema.Types.ObjectId,
> ref: 'Seasons',
> require: true,
> },
> perNight: {
> type: Number,
> },
> });
> return mongoose.model('Prices', PricesSchema);
> }
> 
> ```

yes this way it was working but now I have to add everywhere mongoose right now

`module.exports = (mongoose, Mongoose) => {`

Do I need to use this ?

---

<div class="post-metadata">

**Author:** ![Alban\_Bertolini](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/alban_bertolini/32/1077_2.png) [@Alban\_Bertolini](https://community.forestadmin.com/u/Alban_Bertolini)\
**Post date:** [May 4, 2023, 11:07am UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/9 "2023-05-04T11:07:42Z")

</div>

Yes, [according the doc](https://docs.forestadmin.com/documentation/how-tos/maintain/upgrade-notes-sql-mongodb/upgrade-to-v7#mongoose-specific-changes), you must prefix all your using `Schema.types` by the `Mongoose` object provided by the lambda function. 🤕

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 4, 2023, 11:49am UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/10 "2023-05-04T11:49:56Z")

</div>

why we are using same mongoose two time, I don’t get it ?

because I can’t override my models also

```javascript
module.exports = (mongoose) => {
  const schema = mongoose.Schema({
    'country': String,
    // ...
  });

  return mongoose.model('companies', schema, );
};

```

for example why we are not using this use ?

---

<div class="post-metadata">

**Author:** ![Alban\_Bertolini](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/alban_bertolini/32/1077_2.png) [@Alban\_Bertolini](https://community.forestadmin.com/u/Alban_Bertolini)\
**Post date:** [May 4, 2023, 2:01pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/12 "2023-05-04T14:01:24Z")

</div>

`moogoose` is the instance connection and `Mongoose`, is the static reference of the Mongoose package. This is useful when our customers use several mongoose databases.  
Why you don’t want to use `Mongoose`?

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 4, 2023, 2:02pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/13 "2023-05-04T14:02:52Z")

</div>

basically I am using mongodb database and without mongoose parameters v7 doesn’t work right ?  
and are u sure about that we need two argument like that ?

---

<div class="post-metadata">

**Author:** ![Alban\_Bertolini](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/alban_bertolini/32/1077_2.png) [@Alban\_Bertolini](https://community.forestadmin.com/u/Alban_Bertolini)\
**Post date:** [May 4, 2023, 2:58pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/14 "2023-05-04T14:58:29Z")

</div>

According the documentation, the lambda function provides two arguments.

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 5, 2023, 9:12am UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/15 "2023-05-05T09:12:01Z")

</div>

> [@codere](#):
>
> `(mongoose, Mongoose)`

yes but I don’t understand why because it doesn’t makes sense for me.

---

<div class="post-metadata">

**Author:** ![codere](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/codere/32/6064_2.png) [@codere](https://community.forestadmin.com/u/codere)\
**Post date:** [May 5, 2023, 10:05am UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/16 "2023-05-05T10:05:25Z")

</div>

also I will update my database structure after this upgrade should I backup database because I have some data in forest admin and I don’t want to lose them.

---

<div class="post-metadata">

**Author:** ![Alban\_Bertolini](https://dub1.discourse-cdn.com/flex013/user_avatar/community.forestadmin.com/alban_bertolini/32/1077_2.png) [@Alban\_Bertolini](https://community.forestadmin.com/u/Alban_Bertolini)\
**Post date:** [May 5, 2023, 3:22pm UTC](https://community.forestadmin.com/t/upgrade-liana-v7-mongoose/6240/17 "2023-05-05T15:22:11Z")

</div>

Hello,  
Forest Admin will never remove your data.  
This migration will not update your database structure. This migration is useful to make in compatible with our mongoose agent.  
For your migration, the best practice is to run it on your staging environment before to run it on your production. If you you don’t have staging environment, you can run the migration on your machine with some data on your database and checks if all is ok.
