Unexpected __data in mongodb loopback v3

Viewed 73

Why my database has field __data that exactly copying the real data but wouldn't update if the data is changed?

Here is the example of the data :

{
  "id": ObjectId("600ffdf0317f9617960b7df6"),
  "userId" : "bf959bb8-78a6-426b-b372-cf5a1f9ef731",
  "name": "Product 1",
  "isActive": true,
  "createdAt": ISODate("2021-05-26 11:33:04.992Z"),
  "updatedAt": null,
  "__data": {
    "id": "600ffdf0317f9617960b7df6",
    "userId" : "bf959bb8-78a6-426b-b372-cf5a1f9ef731",
    "name": "Product 1",
    "isActive": true,
    "createdAt": ISODate("2021-05-26 11:33:04.992Z"),
    "updatedAt": null,
  },
}

when I update the data lets say, {"name": "Product 1 New"}, but the "__data.name" still "Product 1"

The problem is when I get the data using find() or findById(), the result is showing "Product 1" which is get from the __data instead of the real data.

I'm using loopback v3 and using mongodb for the database. Below is my schema for product.

product.json

{
    "name": "products",
    "base": "PersistedModel",
    "plural": "products",
    "idInjection": true,
    "options": {
      "validateUpsert": true
    },
    "properties": {
      "id": {
        "type": "string",
        "id": true
      },
      "userId": {
        "type": "string"
      },
      "name": {
        "type": "object"
      },
      "isActive": {
        "type": "boolean",
        "default": false
      },
      "createdAt": {
        "type": "date",
        "default": "$now"
      },
      "updatedAt": {
        "type": "date",
        "default": "$now"
      },
    },
    "validations": [],
    "relations": {
      "user": {
        "type": "belongsTo",
        "model": "reseller",
        "foreignKey": "userId"
      }
    },
    "acls": [
      
    ],
    "scope": {
      "order": ["createdAt DESC"]
    },
    "methods": {}
  }

How to solve this?

I want to get the response is the real data which is the updated one, and how to avoid to have field __data?

1 Answers

In case somebody stumbled on this even though LB3 is pretty much dead and IBM is trying to kill off LB4. My problem was the difference between update() and updateAll(), updateAll() seem to add the data object in mongodb not sure why or how if change to update() is should be fine.

Related