我是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。
所以我需要帮助这个案例,
如何按dateCreated
排序以获取最新的更新记录以及来源。
我正在使用Java API从Mongo获取记录。如果有人帮助我找到我将如何在java中使用相同的查询,我将不胜感激。
希望我的问题很明确。提前谢谢。
答案 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
}