Пн go 4.2 база запросов по дате - PullRequest
1 голос
/ 13 марта 2020

Мне нужно запросить Mon go с помощью функции НАЙТИ, я не могу использовать агрегатную функцию.

Мои документы выглядят так:

{
  "name": "Tom",
  "priDate":2010-04-11T00:00:00.000Z
}

Запрос, который я бы как сделать это:

Найти все документы, где ("priDate" + 1 год) сегодня lte.

Возможно ли это сделать без использования запроса агрегации? Я не могу использовать значение поля в find ..

Мне кажется, что запрос, который мне понадобится, будет таким, как я сделал:

db.system.profile.find({ 
 "priDate" : 
    {     
        $gte:   new Date(ITSELF + 1 year??) ,     
        $lt :  new Date() 
   } 
})

Можете ли вы мне помочь?

большое спасибо, я схожу с ума:)

Ответы [ 3 ]

1 голос
/ 13 марта 2020

посмотрите, работает ли это:

db.collection.find(
    {
        $expr: {
            $lte: ['$priDate', { $subtract: ['$$NOW', 31536000000] }]
        }
    }
)

https://mongoplayground.net/p/QJ3BbHTQlgh

0 голосов
/ 13 марта 2020

Добавление «1 года» может быть затруднено из-за високосных лет или летнего времени. Я предлагаю момент. js, тогда решение будет

db.system.profile.find(
   {
      priDate: {
         $gte: moment().add(1, "year").toDate(),
         $lt: moment().toDate()
      }
   }
)

Однако priDate >= "today + 1 year" AND priDate < "today" невозможно. Измените условие в соответствии с вашими потребностями.

0 голосов
/ 13 марта 2020

MongoDB хранит даты в миллисекундах с начала эпохи, поэтому вы можете продвинуть дату на один год, добавив количество миллисекунд в году, используя $add внутри $expr, а затем протестируйте с помощью $lte:

db.system.profile.find({$expr:{$lte:[{$add:["$priDate",31536000000]},new ISODate()]}})

Обратите внимание, что это будет отключено днем ​​високосного года, если вы не отрегулируете количество миллисекунд для этого.

Вы указали ограничение, что вы не можете использовать агрегат, но с $ expr в Пн go 3.6 и далее, вы также можете использовать любые и все агрегирующие операторы в поисковом запросе.

https://docs.mongodb.com/manual/reference/operator/query/expr/#definition

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...