Как получить данные запроса в arangojs

Привет, я использую arangojs, создал базу данных, добавил данные в коллекцию beusers.

Теперь я хочу прочитать добавленные данные. В ArangoDB я могу сделать это с помощью запроса

FOR user IN beusers
FILTER user.password == '3670747394' && user.email == '3817128089'
RETURN user

Делает

const user = await usedDB.parse(aql`
        FOR user IN ${usersCol.name}
        FILTER user.password == ${hashedPassword} && user.email == ${hashedEmail}
        RETURN user
`)
console.log(user)

в arangojs я получаю

{
  error: false,
  code: 200,
  parsed: true,
  collections: [],
  bindVars: [ 'value2', 'value0', 'value1' ],
  ast: [ { type: 'root', subNodes: [Array] } ]
}

Пример в readme дал мне только одно.

Что мне не хватает? Как я могу прочитать данные?


person pgalle    schedule 29.04.2021    source источник


Ответы (2)


Вы хотите использовать Database.query() для получения курсора ( ArrayCursor), а затем вы хотите вернуть значение в список результатов курсора (например, используя ArrayCursor.all()).

Таким образом, код будет выглядеть так:

const cursor = await usedDB.query(aql`
  FOR user IN ${usersCol.name}
    FILTER user.password == ${hashedPassword} && user.email == ${hashedEmail}
    RETURN user
`);
console.log(await cursor.all()); // returns array of users
person gurisko    schedule 16.06.2021

Кажется, я просто использовал неправильный метод. Правильно было бы:

const user = await db.executeTransaction(
    {
      read: ['beusers'],
    },
    `
      function() {
        // This code will be executed inside ArangoDB!
        const { query } = require("@arangodb");
        return query\`
            FOR user IN ${col.name}
            FILTER user.password == "${stringHash(
              passedUser.password,
            )}" && user.email == "${stringHash(passedUser.email)}"
            RETURN user
          \`.toArray()[0];
      }
    `,
  )
person pgalle    schedule 30.04.2021