2015-06-16 5 views
0

Я принимаю курс на MongoDB по телефону MongoDB University. Для домашней работы я выполнил все необходимое, но при сортировке сообщения в блоге, основанного на порядке убывания даты, я получаю NullPointerException. Я много пробовал, но не могу избавиться от него. Кто-нибудь может мне помочь?Сортировка по дате в MongoDB

Вот мой код Java, когда я вставляю сообщение в блоге в базу данных.

Document post = new Document(); 

    post.append("title", title); 
    post.append("author", username);  
    post.append("body", body); 
    post.append("permalink", permalink); 
    post.append("tags", new BasicDBList()); 
    post.put("tags", tags); 
    post.append("comments", new BasicDBList()); 

    post.append("date", new BsonDateTime(System.currentTimeMillis())); 
    postsCollection.insertOne(post); 

Вот код, который я использую для сортировки по сниженным дате поступления.

public List<Document> findByDateDescending(int limit) { 

    // XXX HW 3.2, Work Here 
    // Return a list of DBObjects, each one a post from the posts collection 

    List<Document> posts = null; 
    FindIterable<Document> cursor = postsCollection.find().sort(new BasicDBObject("date", -1)); 

    Iterator itrtr = cursor.iterator(); 
    while(itrtr.hasNext()) 
    { 
     Document d = (Document)itrtr.next(); 
     System.out.println(d); 
     posts.add(d); 
    } 
    return posts; 
} 

и вот след стека исключений, который я получаю.

Document{{_id=55802877234b082104416d86, title=hello, author=hardik, body=hello world post, permalink=hello, tags=[hello, world, me], comments=[], date=Tue Jun 16 19:15:27 IST 2015}} Document{{_id=55802877234b082104416d86, title=hello, author=hardik, body=hello world post, permalink=hello, tags=[hello, world, me], comments=[], date=Tue Jun 16 19:15:27 IST 2015}} java.lang.NullPointerException 
at course.BlogPostDAO.findByDateDescending(BlogPostDAO.java:57) 
at course.BlogController$1.doHandle(BlogController.java:117) 
at course.BlogController$FreemarkerBasedRoute.handle(BlogController.java:97) 
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:139) 
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:54) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:451) 
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266) 
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527) 
at java.lang.Thread.run(Thread.java:744) 
+0

posts.add (г) находится на линию № 57 –

ответ

1

Ваша проблема не имеет отношения к MongoDB. Это простая ошибка Java. Вы объявляете свой список с:

List<Document> posts = null; 

posts теперь нуль-указатель, поэтому, когда вы пытаетесь сделать posts.add(d); вы получите NullPointerException. Вместо инициализации posts = null, инициализировать его в new ArrayList (или другой класс, который реализует List)

+0

Я думаю, что это глупая ошибка кто-либо когда-либо делали. Спасибо за указание. –

+0

@HardikModha Вы можете рассмотреть возможность запретить ключевое слово 'null' из вашего кода в целом. Его почти всегда можно избежать. В редкой ситуации, когда значение «null» означает «Я не знаю» или «не применимо», вы можете использовать ['Необязательный'] (http://www.oracle.com/technetwork/articles/java /java8-optional-2175753.html). Когда это означает, что «я не мог его найти», не возвращайте null, генерируя исключение. – Philipp

+0

Спасибо за информацию @Philipp. Вчера я был настолько глубоко внутри MongoDB, что не мог даже найти эту глупую ошибку и потратил много времени на это. –

Смежные вопросы