在mongodb中按日期对值排序

时间:2014-02-11 07:41:40

标签: java mysql mongodb mongodb-query

我是mongodb的新手,我正在尝试按日期对所有行进行排序。我有混合来源的记录,我试图分开排序。某些记录在写入db时我没有更新dateCreated。后来我找到了,我在数据库中的所有记录中添加了dateCreated。假设我总共有4000条记录,前1000条我没有dateCreated。最新的3000有该专栏。在这里,我尝试使用dateCreated列获取最后更新的记录。这是我的代码。

db.person.find({"source":"Naukri"}&{dateCreated:{$exists:true}}).sort({dateCreated: 1}).limit(10)

这段代码重新给我一些结果(来自那1000条记录),我根本看不到dateCreated列。此外,如果我在这里更改(-1){dateCreated: -1}我会从其他来源获得结果,但不是Naukri。

所以我需要帮助这个案例,

  1. 如何按dateCreated排序以获取最新的更新记录以及来源。

  2. 我正在使用Java API从Mongo获取记录。如果有人帮助我找到我将如何在java中使用相同的查询,我将不胜感激。

  3. 希望我的问题很明确。提前谢谢。

2 个答案:

答案 0 :(得分:2)

从文档中你会(你会,你不会 - 点头是)阅读,你会发现你正在使用的find命令的第一个参数是所谓的查询文档。在本文档中,您指定了一个字段和条件列表,“逗号”分隔,这相当于声明性语法(如SQL)中的条件。

您的查询问题是它无效,并且与任何内容都不匹配。正确的语法如下:

db.person.find({"source":"Naukri", dateCreated:{$exists:true}})
    .sort({dateCreated: -1})
    .limit(10)

所以现在这将按照为“source”提供的value进行过滤,并且“dateCreated”字段存在,这意味着它存在,并且它包含一些内容。

我建议查看以下链接,这两个链接中的第一个涉及构造mongoDB查询以及find方法及其参数。所有功能都转换为每种语言实现。

对于Java API以及如何使用,根据您的使用情况,有不同的方法。 API提供了一个BasicDBObject类,它或多或少等同于JSON文档表示法,并且是一种hashmap概念。对于shell方法的更多内容和帮助器更像一些动态语言方法,有一个QueryBuilder类,后两个链接给出了示例和信息。这些允许链接使您的查询更加可读

仅Stack Overflow就有很多例子。我建议你看看。

<强> http://docs.mongodb.org/manual/tutorial/query-documents/

<强> http://docs.mongodb.org/manual/reference/method/db.collection.find/

<强> How to do this MongoDB query using java?

<强> http://api.mongodb.org/java/2.2/com/mongodb/QueryBuilder.html

答案 1 :(得分:1)

您的查询不正确。请按以下步骤更新:

db.person.find({"source":"Naukri", dateCreated:{$exists:true}}).sort({dateCreated: 1}).limit(10)

在Java中,您可以按照以下方式执行此操作:

Mongo mongo = ...
DB db = mongo.getDB("yourDbName");
DBCollection coll = db.getCollection("person");

DBObject query = new BasicDBObject();
query.put("source", "Naukri");
query.put("dateCreated", new BasicDBObject($exists : true));

DBCursor cur = coll.find(query).sort(new BasicDBObject("dateCreated", 1)).limit(10);    
while(cur.hasNext()) {
    DBObject obj = cur.next();
    // Get data from the result object here
}