Search code examples
node.jsfeathersjsfeathers-hook

how to filter the data returned in find FeatherJs


I have this code that returns this result:

// Use this hook to manipulate incoming or outgoing data.
// For more information on hooks, see: http://docs.feathersjs.com/api/hooks.html

module.exports = function (options = {}) { // eslint-disable-line no-unused-vars
    return async context => {
      // Get `app`, `method`, `params` and `result` from the hook context
      const { app, method, result, params } = context;

      // Make sure that we always have a list of users either by wrapping
      // a single message into an array or by getting the `data` from the `find` method's result
      const interacts = method === 'find' ? result.data : [ result ];

      // console.log(users);

      // Asynchronously get user object from each message's `userId`
      // and add it to the message
      await Promise.all(interacts.map(async interact => {

        // await Promise.all(user.map(async interacts => {
          // Also pass the original `params` to the service call
          // so that it has the same information available (e.g. who is requesting it)
          // bots.botId = await app.service('bots').get(bots.botId, params);
          interact.display = await app.service('messages').find({
             query: {
              to: "ijHTUNeSbSQNICOC",
              from: "8Tp5maaTePqiD3DI",
              $limit: 1,
              $sort: {
                createdAt: -1
              }
             }
          });
        // }));

      }));
      console.log(context);

      // Best practice: hooks should always return the context
      return context;
    };
  };

return this result:

 "total": 6,
  "limit": 10,
  "skip": 0,
  "data": [
    {
      "userId": "8Tp5maaTePqiD3DI",
      "interactUser": "ijHTUNeSbSQNICOC",
      "_id": "3r3MY8SagJMqcEj4",
      "display": {
        "total": 2,
        "limit": 1,
        "skip": 0,
        "data": [
          {
            "text": "nome1",
            "from": "8Tp5maaTePqiD3DI",
            "to": "ijHTUNeSbSQNICOC",
            "createdAt": 1554757301176,
            "_id": "o2vkUj7suYzhEZk7"
          }
        ]
      }
    },
    {
      "userId": "fNEgNVk6yh3msVa8",
      "interactUser": "Z5DO1Gx2YpXLTRBb",
      "_id": "KAtOheLC6AEiJL41",
      "display": {
        "total": 2,
        "limit": 1,
        "skip": 0,
        "data": [
          {
            "text": "nome1",
            "from": "8Tp5maaTePqiD3DI",
            "to": "ijHTUNeSbSQNICOC",
            "createdAt": 1554757301176,
            "_id": "o2vkUj7suYzhEZk7"
          }
        ]
      }
    },
    {
      "userId": "Z5DO1Gx2YpXLTRBb",
      "interactUser": "Z5DO1Gx2YpXLTRBb",
      "_id": "LgoqQxxR8538fnu3",
      "display": {
        "total": 2,
        "limit": 1,
        "skip": 0,
        "data": [
          {
            "text": "nome1",
            "from": "8Tp5maaTePqiD3DI",
            "to": "ijHTUNeSbSQNICOC",
            "createdAt": 1554757301176,
            "_id": "o2vkUj7suYzhEZk7"
          }
        ]
      }
    },
    {
      "userId": "8Tp5maaTePqiD3DI",
      "interactUser": "8Tp5maaTePqiD3DI",
      "_id": "PuUaonKg3hol2wz0",
      "display": {
        "total": 2,
        "limit": 1,
        "skip": 0,
        "data": [
          {
            "text": "nome1",
            "from": "8Tp5maaTePqiD3DI",
            "to": "ijHTUNeSbSQNICOC",
            "createdAt": 1554757301176,
            "_id": "o2vkUj7suYzhEZk7"
          }
        ]
      }
    },

how to leave only data this..:

"userId": "Z5DO1Gx2YpXLTRBb",
  "interactUser": "fNEgNVk6yh3msVa8",
  "_id": "T3ekz58yNDacS5o2",
  "display": 
       {
        "text": "nome1",
        "from": "8Tp5maaTePqiD3DI",
        "to": "ijHTUNeSbSQNICOC",
        "createdAt": 1554757301176,
        "_id": "o2vkUj7suYzhEZk7"
  }

"userId": "Z5DO1Gx2YpXLTRBb", "interactUser": "fNEgNVk6yh3msVa8", "_id": "T3ekz58yNDacS5o2", "display": { "text": "nome1", "from": "8Tp5maaTePqiD3DI", "to": "ijHTUNeSbSQNICOC", "createdAt": 1554757301176, "_id": "o2vkUj7suYzhEZk7" }

If there is any way, or rather to format the results returned by the query


Solution

  • The reason why you have those results is because of pagination. Disabling the pagination will only return the data.

    You can create your own hook to handle queries that will disable the pagination if requested.

    The good news is, there is a package that will solve your problem, feahters-hooks-common.

    The exact hook you want is documented in (disablepagination) .