Условия Waterline ORM (sails.js) с NOT Equal в запросе

Как я могу написать НЕ равное условие в Waterline?

Этот код:

Users
  .count()
  .where({
     id: { '!=': req.params.id},
     lastname: req.body.lastname
  })

Ничего не делает... (адаптер диска в sails.js)

Ответ 1

Во-первых, он ничего не делает, потому что поиск в базе данных асинхронен. Вы должны сделать цепочку длиннее и добавить exec или что-то из библиотеки Q, как тогда.

User.count().where({
    id: { '!=': req.params.id },
    lastname: req.body.lastname
}).exec(function(err, num){
    console.log(num);
});

Теперь он возвращает 0. Чтобы он возвращал правильное число вместо '! =', просто напишите '!'.

Ответ 2

Добавление этого ответа для всех, кто использует Postgres. Я пытался это и ударился головой о стену, так как она не работала, и я не мог понять, почему. Я обыскал все и продолжал находить этот ответ.

Если вы используете postgres, вы хотите использовать

id: { not: req.params.id }

После просмотра Sailsjs документации и поиска Google долго и упорно я нашел этот ответ в комментариях модуля query.js парусов-PostGreSQL. Надеюсь, это поможет спасти кого-то в той же ситуации некоторое время. Вот полный блок комментариев, который спас мне разум.

/**
 * Specifiy a `where` condition
 *
 * `Where` conditions may use key/value model attributes for simple query
 * look ups as well as more complex conditions.
 *
 * The following conditions are supported along with simple criteria:
 *
 *   Conditions:
 *     [And, Or, Like, Not]
 *
 *   Criteria Operators:
 *     [<, <=, >, >=, !]
 *
 *   Criteria Helpers:
 *     [lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual, not, like, contains, startsWith, endsWith]
 *
 * ####Example
 *
 *   where: {
 *     name: 'foo',
 *     age: {
 *       '>': 25
 *     },
 *     like: {
 *       name: '%foo%'
 *     },
 *     or: [
 *       { like: { foo: '%foo%' } },
 *       { like: { bar: '%bar%' } }
 *     ],
 *     name: [ 'foo', 'bar;, 'baz' ],
 *     age: {
 *       not: 40
 *     }
 *   }
 */