从runCommand升级mongo搜索以查找使用Java驱动程序

时间:2014-06-04 12:34:46

标签: java mongodb

我正在使用Java驱动程序来运行一些mongo文本搜索。 我之前代码的一个例子是(其中values是传入的String):

DBCollection coll = db.getCollection("testCollection");
//create the basic object
DBObject searchCmd = new BasicDBObject();
//create the search cmd
searchCmd.put("text", "testCollection"); // the name of the collection (string)
// define the search word
searchCmd.put("search", value); // the term to search for (string)
// define the return values
searchCmd.put("project", new BasicDBObject("score", 1).append("name", 1).append("path", 0).append("_id", 0));
// get the results
BasicDBObject commandResult = db.command(searchCmd);
// Just out the results key
BasicDBList results = (BasicDBList) commandResult.get("results");
然后我循环了#34;结果"

我得到的每一个得分
// Get the number ii
BasicDBObject element = (BasicDBObject) results.get(ii);
// Now get the score
double score = (double) element.get("score");

我想升级到使用find,因为这似乎是2.6以后的方式。到目前为止,我有:

DBCollection coll = db.getCollection("testCollection");
BasicDBObject query = new BasicDBObject();
query.append("$text", new BasicDBObject("$search", value));
DBCursor cursor = coll.find(query);

但是,我不确定如何获得分数。 我尝试过这样的事情:

query.append("得分",新的BasicDBObject(" $ meta"," textScore"));

但这不起作用。我希望能够获得名称和分数,以便我可以将它们插入到一个新的集合中,该集合也可以保留分数。

我可以通过以下方式轻松获得名称:

while (cursor.hasNext()) 
{
DBObject next = cursor.next();
String name = next.get("name").toString();
}

但我如何得分?

1 个答案:

答案 0 :(得分:1)

我找到了这个有趣的页面:http://api.mongodb.org/java/current/

看来find可以使用第二个包含字段的DBObject。

我创建了一个新对象:

BasicDBObject fields = new BasicDBObject();
fields.append("score", new BasicDBObject("$meta", "textScore"));

我正在使用以下方式调用find:

DBCursor cursor = coll.find(query, fields);

现在我可以得到与得到名字相同的分数。