2015-03-17 2 views
0

Я хотел бы иметь функцию в моем контроллере для получения данных на основе временного диапазона. Во-первых, у меня есть все данные в mongodb, есть атрибут ModifiedTime, поскольку строка выглядит как 2015-02-25T17:17:33Z. Во-вторых, я определить модель в парусами с ModifiedTime:Как использовать datetime в парусах модель

{ type: 'datetime', columnName: 'ModifiedTime' } 

В model.js, я поставил schema: true. Затем в моем контроллере я пытаюсь использовать

User.find({ModifiedTime : {'<=' : new Date('2015-03-18T00:00:00Z')}}).exec(function(err,st){ 
     if (err) return res(err); 
      if (!st) return res(new Error('Invalid ModifiedTime.')); 

      return res.json(st); 
    }); 

Но я ничего не вижу, всегда вижу [] в режиме просмотра. Я использовал ватерлинию http://localhost:1337/User для проверки данных в режиме просмотра. Я могу видеть все данные из mongodb. Странная вещь, я вижу что-то вроде ModifiedTime": "2015-02-18T17:36:53Z. поэтому, для меня, похоже, что ModifiedTime в парусах по-прежнему является строкой, верно? но я задал тип как datetime в модели. Надеюсь, он мог бы передать строку mongodb в datetime в фоновом режиме, не так ли? Пожалуйста, дайте несколько советов. я провожу уже слишком много времени для того, что :( большое спасибо! WJS

ответ

0

Вы правильно/неправильно.

В вашей БД вы укажите даты и времени является строкой. Если это уже строка то вы не можете установить его, чтобы быть датой в вашей модели парусов. вы должны просто сравнить две строки, вместо преобразования 2015-03-18T00:00:00Z в день.

User.find({ModifiedTime : {'<=' : '2015-03-18T00:00:00Z'}}).exec(function(err,st){ 
     if (err) return res(err); 
      if (!st) return res(new Error('Invalid ModifiedTime.')); 

      return res.json(st); 
    }); 

Если вы truley хотите использовать дату/время, то вы должны идти через ваши исходные данные и изменить измененное время на объект даты/времени.

+0

Привет, Meeker, большое спасибо за подсказку. хорошо, я думаю, что самый простой способ - сравнить строку. просто для дальнейшего понимания. я видел «datetime \t проверить, является ли строка в этой записи похожей на javascript datetime» в этой ссылке https://github.com/balderdashy/waterline-docs/blob/master/models.md, что означают эти Правила валидации? есть ли простой способ трансформировать это? просто интересно знать :) спасибо – WJS

+0

Ваш прием! Вы можете подтвердить дату и сохранить ее как строку, если хотите. {type: string ', date: true} - это должно делать то, что вы хотите. Вы просто не можете использовать {type: date}, потому что ваши текущие даты являются строками. Ответьте на свой вопрос? – Meeker

+0

Привет, Микер, да, я понял. Я только что пробовал вашу идею, но всегда получаю ошибку throw: TypeError: объект не является функцией. вызывая функцию. где может быть проблема? спасибо – WJS