有人可以在Java中提供完整的tailable游标示例吗?我使用3.0驱动程序,所有示例似乎是2.x.我的classpath中只有mongo-java-driver-3.0.0.jar。我希望得到所有文件,因为它们被插入我的上限集合中。
//this does not work...
MongoCollection<BasicDBObject> col = database.getCollection(colName, BasicDBObject.class);
DBCursor cur = col.find().sort(new BasicDBObject("$natural", 1))
.addOption(Bytes.QUERYOPTION_TAILABLE)
.addOption(Bytes.QUERYOPTION_AWAITDATA);
// And this does not work...
BasicDBObjectBuilder builder = BasicDBObjectBuilder.start();
builder.add("messageType","STATUS_REQUEST");
DBObject searchQuery = builder.get();
DBObject sortBy = BasicDBObjectBuilder.start("$natural", 1).get();
BasicDBObjectBuilder builderForFields = BasicDBObjectBuilder.start();
DBObject fields = builderForFields.get();
DBCursor cursor = new DBCursor(col, searchQuery, fields, ReadPreference.primary() );
cursor.sort(sortBy);
cursor.addOption(Bytes.QUERYOPTION_AWAITDATA);
cursor.addOption(Bytes.QUERYOPTION_TAILABLE);
//this does work but only returns the messageNumber field. I need the doc.
MongoCursor<Long> c = database.getCollection(colName).distinct("messageNumber", Long.class).iterator();
我看到MongoCursor接口是在3.0中添加的。那是什么,它取代了DBCursor?
非常感谢
答案 0 :(得分:6)
派对有点晚了,但如果你还需要帮助的话:
find(query).projection(fields).cursorType(CursorType.TailableAwait).iterator();
该代码适用于MongoCollection
类。
CursorType是枚举,它具有以下值:
Tailable
TailableAwait
对应旧的DBCursor addOption Bytes类型:
Bytes.QUERYOPTION_TAILABLE
Bytes.QUERYOPTION_AWAITDATA
我希望有所帮助。
答案 1 :(得分:4)
这就是你可能正在寻找的东西 - 在MongoDB 3.0中使用EVENT Streaming。*使用新的api即3.0.2
Document query = new Document(); \\here use { indexedField: { $gt: <lastvalue> } index is not used(except for auto deleting documents) but created in capped collection
Document projection = new Document();
MongoCursor<Document> cursor= mongocollection.find(query).projection(projection).cursorType(CursorType.TailableAwait).iterator(); //add .noCursorTimeout(true) here to avoid timeout if you are working on big data
while (cursor.hasNext()){
Document doc = cursor.next();
//do what you want with doc
}
这样mongo游标将检查上限集合中的新条目
答案 2 :(得分:0)
在最后一行中,将.distinct("messageNumber", Long.class)
替换为.find()
。
distinct(String fieldName, Class<TResult> resultClass)
仅返回您请求的一个字段的唯一值。
find()
返回集合中包含所有字段的所有文档。