Я испытываю интересное поведение при использовании метода фильтра для коллекции запросов, возвращенной в persistence.js (http://persistencejs.org/)
Вот пример кода, который я запустил в отладчике:
Bookmark.all().list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root` WHERE 1=1 []
0
1
2
Очевидно, в базе данных сохранено три Bookmark
объекта, каждый с идентификатором 0, 1 и 2.
Однако, когда я пытаюсь отфильтровать объекты с помощью оператора, "in"Он начинает возвращать некоторые интересные результаты.
Bookmark.all().filter('id','in',[0,1,2]).list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root` WHERE (1=1 AND `root`.`id` IN (?, ?, ?)) [0, 1, 2]
Результаты этого запроса ничего не значат, сам фильтр ничего не возвращает, что немного странно, учитывая, что я только что подтвердил, что в базе данных были определенные объекты, соответствующиеэти параметры. Я также попробовал простой тест на равенство.
Bookmark.all().filter('id','=',0).list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root` WHERE (1=1 AND `root`.`id` = ?) [0]
Опять же, нет попаданий. Что, пожалуй, самое странное, если я выполню это:
Bookmark.all().filter('id','<',2).list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root` WHERE (1=1 AND `root`.`id` < ?) [2]
0
1
2
Но 2 определенно неменьше 2. Я делаю что-то не так? Кажется странным, что функция фильтра не будет работать так, особенно когда она выводит соответствующие запросы SQL.
ОБНОВЛЕНИЕ похоже, что это комбинация решения @nrabinowitz.Я немного покопался, и оказалось, что по умолчанию idType, объявленный в исходном коде файла persistence.js, называется VARCHAR (32).Это объясняет нежелательное поведение.