1

I'm using https://github.com/typicode/lowdb for a small project. I need a query which searches multiple records and returns each record it finds as an array.

For example, for a db such as:

  "records": [
    {
      "id": "sadohfdsf",
      "username": "user1",
      "data": "abc"
    },
    {
      "id": "tiyuykuy",
      "username": "user1",
      "data": "xyz"
    },
    {
      "id": "tryehhrt",
      "username": "user2",
      "data": "tyu"
    }
  ]

I'd like to query all the records for username: "user1" and get all the records for that user in an array.

I've tried the default:

const user = await db.get('records')
.find({ username: "user1" })
.value();

return user;

but it only finds the first record in the db.

What's the correct way to find multiple records in lowdb?

FlameDra
  • 1,807
  • 7
  • 30
  • 47

2 Answers2

2

Use filter instead of find .

const users = await db('records').filter({ username: "user1" });

Ref: https://github.com/typicode/lowdb/issues/185 Left join with lowdb

Multipe filters means use chain() as well

Senthil
  • 2,156
  • 1
  • 14
  • 19
1

NOTE: I don't use LowDB

Judging by the docs, I think it's not possible to find multiple records in LowDB. Instead, you can use the Array#filter method.

// Assuming the following returns an array of your object
const users = await db.get('records')
    .value();

// We can `filter` the user(s)
const result = users.filter(
    user => user.username === 'user1' /* or any other username */
);
Kyuzu
  • 93
  • 6