Spring Data MongoDB Дата Между

Я использую данные весны mongodb.

Я хочу записи между двумя датами. Работает следующий запрос MongoDB:

<code>db.posts.find({startDate: {$gte: start, $lt: end}});
</code>

Моя попытка преобразования кода объекта запроса данных Spring не работает:

<code>Query query = new Query();
query.addCriteria(Criteria.where("startDate").gte(startDate)
                            .and("startDate").lt(endDate));
</code>

Каков правильный порядок вызовов методов для построения запроса Mongo, который мне нужен?

 Hamedz17 авг. 2016 г., 23:39
Когда вы вводите filedName (например, startDate) более одного раза, вы получаетеInvalidMongoDbApiUsageException .... вы не можете добавить вторую "startDate" ...

Ответы на вопрос(5)

publishedDate и вот как я это сделал:

    Criteria publishedDateCriteria = Criteria
                        .where("publishedDateObject").gte(psDate)
                        .lte(peDate);
    Query query = new Query(publishedDateCriteria);
    mongoTemplate.find(query,
                        MyDocumentObject.class));
 27 мар. 2017 г., 07:34
Спасибо Джеймс, это действительно полезно.
 27 мар. 2017 г., 07:37
@ user3327951, приятно знать. :) Спасибо.

and("startDate")& APOS; участие в ваших критериях.

Вместо :

query.addCriteria(Criteria.where("startDate").gte(startDate).and("startDate").lt(endDate));

Вы должны использовать:

query.addCriteria(Criteria.where("startDate").gte(startDate).lt(endDate));

Когда вы включаете «и» («startDate») » часть, Монго видит это как две разные записи в одном и том же свойстве.

 12 дек. 2012 г., 13:36
Это совершенно правильный ответ и должен быть помечен как правильный.
 30 июл. 2018 г., 06:03
@ java25 так как ты это исправишь
 02 мая 2015 г., 15:15
query.addCriteria (Criteria.where (& Quot; DOB & Quot;) GTE (StartDate) .lt (EndDate).); не работает в моем случае. Что я должен использовать, чтобы найти объект dob в db, например: & quot; dob & quot; : ISODate ("1991-01-22T18: 30:00"),
 12 окт. 2014 г., 05:59
просто отметив здесь, что «startDate» и & quot; endDate & quot; являются объектами java.util.Date и создают запрос mongodb, такой как & quot; startDate & quot; : {& quot; $ gte & quot; : {& quot; $ date & quot; : & quot; 2014-09-01T07: 00: 00.000Z & quot;}, & quot; $ lt & quot; : {& quot; $ date & quot; : & quot; 2014-10-01T07: 00: 00.000Z & quot;}}}

DBCollection coll = db.getCollection("posts");  

BasicDBObject date = new BasicDBObject();
date.append("$gte", new Date(startDate));
date.append("$lte", new Date(endDate));

DBObject query = new BasicDBObject();
query.put("date", date);

DBCursor cursor = coll.find(query);

Кроме того, для записи у вас есть «startDate» как для параметров gte, так и для параметров lte.

 ujava03 мая 2012 г., 19:24
Спасибо хороший пример.

Criteria criteria = Criteria.where("pt").gte(startDate)
       .andOperator(Criteria.where("pt").lt(endDate));
 02 мая 2015 г., 14:25
Я пытаюсь что-то вроде поиска доб. Но я не смог найти ни одного пользователя. Хотя их 200 пользователей в базе данных. критерии = Criteria.where (& quot; dob & quot;). lt (startDate.getTime ()). gte (endDate.getTime ());

Ссылка здесь

  Criteria.where("ip").is(ip)
  .andOperator(
    Criteria.where("createdDate").lt(endDate),
    Criteria.where("createdDate").gte(startDate)
  )
);

Ваш ответ на вопрос