2016-09-29 13 views
0

私はMongo DBにとても慣れていて、java mongoドライバを使用してJavaクラスからmongo dbのデータを取得しています。Mongo DB +日付でのJavaのクエリ

私は次の行を収集しています。

{ 
     "_id" : "13dded92-a9c0-48f8-9522-7422e2c7c2b6", 
     "E_MAIL" : "Anonymous_User", 
     "CITY" : "New York", 
     "COUNTRY" : "USA", 
     "OPERATING_SYSTEM" : "WINDOWS_10", 
     "DATE_TIME" : "27-08-2016 09:47:17", 
     "TOKEN" : "t76be55otr6galp4prc0f5k7bu" 
} 
{ 
     "_id" : "13dded92-a9c0-48f8-9522-7422e2c7c2b6", 
     "E_MAIL" : "Anonymous_User", 
     "CITY" : "New York", 
     "COUNTRY" : "USA", 
     "OPERATING_SYSTEM" : "WINDOWS_10", 
     "DATE_TIME" : "27-08-2016 09:47:17", 
     "TOKEN" : "t76be55otr6galp4prc0f5k7bu" 
} 
{ 
     "_id" : "13dded92-a9c0-48f8-9522-7422e2c7c2b6", 
     "E_MAIL" : "Anonymous_User", 
     "CITY" : "New York", 
     "COUNTRY" : "USA", 
     "OPERATING_SYSTEM" : "WINDOWS_10", 
     "DATE_TIME" : "24-08-2016 09:47:17", 
     "TOKEN" : "t76be55otr6galp4prc0f5k7bu" 
} 
{ 
     "_id" : "13dded92-a9c0-48f8-9522-7422e2c7c2b6", 
     "E_MAIL" : "Anonymous_User" 
     "CITY" : "New York", 
     "COUNTRY" : "USA", 
     "OPERATING_SYSTEM" : "WINDOWS_10", 
     "DATE_TIME" : "22-08-2016 09:47:17", 
     "TOKEN" : "t76be55otr6galp4prc0f5k7bu" 
} 

私は日付によってグループにそれらをしようとしていますので、日付の 2は、このため27-08-2016

を渡される、この結果を与える必要があり、私は私のJavaクラスに次のコードを試してみました。

import java.text.DateFormat; 
    import java.text.SimpleDateFormat; 
    import java.util.Date; 
    import java.util.Locale; 

    import javax.mail.MessagingException; 
    import javax.mail.internet.AddressException; 

    import org.bson.Document; 
    import org.bson.conversions.Bson; 

    import com.mongodb.AggregationOutput; 
    import com.mongodb.BasicDBObject; 
    import com.mongodb.BasicDBObjectBuilder; 
    import com.mongodb.DB; 
    import com.mongodb.DBCollection; 
    import com.mongodb.DBObject; 
    import com.mongodb.MongoClient; 

    public class Same { 
     public static void main(String[] args) throws AddressException, MessagingException { 

      try { 
       MongoClient mongoClient = new MongoClient("localhost", 27017); 
       DBCollection collection; 

       DB db = mongoClient.getDB("myDB"); 
       collection = db.getCollection("myCollection"); 

       SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy.MM.dd"); 
       String date ="2016.08.27"; 
       String date1 ="2016.08.27"; 
       Date startDate = simpleDateFormat.parse(date); 
       Date endDate = simpleDateFormat.parse(date1); 
       BasicDBObject query1 = new BasicDBObject("LOGIN", new BasicDBObject("$gte",startDate).append("$lt",endDate)); 
       collection.find(query1); 

       System.out.println("count"); 
       System.out.println(collection.find(query1)); 

       mongoClient.close(); 

      } catch (Exception e) { 
       System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
      } 

     } 
    } 

次のように私は、私は本当に行方不明です何を、ここではカウント値を取得する方法

count 
DBCursor{collection=DBCollection{database=DB{name='myDB'}, name='myCollection'}, find=FindOptions{, batchSize=0, limit=0, modifiers=null, projection=null, maxTimeMS=0, skip=0, sort=null, cursorType=NonTailable, noCursorTimeout=false, oplogReplay=false, partial=false}} 

、コンソールを取得しています。すべての

答えて

0

。これは次のようにクエリが日付範囲の間で件のデータを検索すること

{ "LOGIN" : 
    { "$gte" : { "$date" : "2016-08-27T18:30:00.000Z"} , 
     "$lt" : { "$date" : "2016-08-27T18:30:00.000Z"} 
    } 
} 

は、これは何も返しません。

  SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy.MM.dd"); 
      String date ="2016.08.26"; 
      String date1 ="2016.08.27"; 
      Date startDate = simpleDateFormat.parse(date); 
      Date endDate = simpleDateFormat.parse(date1); 

の下にこれを使うとリターンのデータのために働く必要があるように開始日に日付を軽減する

してみてください。

あなたのパターンに合わせてタイミングを変更することができます。

startDate .setHours(0); 
    startDate .setMinutes(0); 

これが役に立ちます。

1

まず、あなたはその後、現在のドライバ;-)

のクラスが欠落している、リターンを見つける反復可能または有用な文書を生成するために反復する必要のDBcursor(バージョンによって異なります)。それらの文書は読まれ、分析されなければならない。

最後に、カウントにのみ興味がある場合は、find()とcount()を使いたくないかもしれません。非推奨のものに頼ることなく

例:

MongoCollection collection = mongoClient.getDatabase("myDB").getCollection("myCollection"); 
... (prepare dates) 
Bson query = Filters.and(
       Filters.gte("fieldName", startDate), 
       Filters.lt("fieldName", endDate)); 
System.out.println(collection.count(query)); 

編集:1つの追加の事:あなたの文書は、このようにが動作しません日付にそれらを比較し、文字列としての日付を保持します。データを保存するときには、Dateオブジェクトも必ず使用してください。 mongoシェルでこれらを照会すると、すべてが正しいときにISODate( '2016-09-27T13:17:05.000Z')のようになります。

0

BasicDBObjectを使用しているので、あなたはmongo-java-driver-2.14.2またはそれより古いと思っています。ただし、適切にあなたがカーソルに割り当てる必要があり、あなたのクエリを実行するには :

DBCursor cursor = coll.find(query1); 

を今、あなたは、このカーソルを反復処理することができます。

try { 
    while(cursor.hasNext()) { 
     System.out.println(cursor.next()); 
    } 
} finally { 
    cursor.close(); 
} 

は今、おそらくあなたのクエリでは、あなたの目標のために右ではありません。あなたのカーソルが参照するドキュメントの数を取得したい場合は、多分あなたは使用することができます:あなたは$gtltに同じ日付を使用している

BasicDBObject query1 = new BasicDBObject("fieldName", new BasicDBObject("$gte",startDate).append("$lt",endDate)); 

long count = db.collection.find(query1).count() 
System.out.println("count: " + count); 
関連する問題