java - 使用java中的运算符将字符串解析为mongodb查询文档

标签 java json mongodb

在我正在进行的一个项目中,有一次我从一个字符串中读取了一个对 mongodb 的查询。我一直在使用 com.mongodb.util.JSON.parse(querystring) 来读取查询,在我开始读取包含 $max 和 $min 等运算符的查询之前,它工作正常。此时,解析器不再使用 mongodb 的 $max 运算符,而是创建一个“$max”字段。例如,

输入字符串:

{ $query : { state : "AL" } , $max : { pop : 9058 } }

被解析为 DBObject:

{ "$query" : { "state" : "AL"} , "$max" : { "pop" : 9058}}

然后,当我使用该查询文档查找 DBCursor 时,我得到一个大小为 0 的游标(在数据库中未找到匹配的文档),大概是因为没有包含“$query”或“$max”字段的文档。

除了 JSON.parse() 之外,还有什么我可以使用的吗?我不反对为它编写自己的函数,但是我怎样才能得到一个将 $ 运算符识别为运算符而不是字段的 DBObject?

如有任何建议,我们将不胜感激!

最佳答案

以下使用查询修改运算符 $max 的代码片段似乎工作正常。

/* {$query:{state:"AL"}, "$max":{pop:10000}}*/
String s = "{$query:{state:\"AL\"}, \"$max\":{pop:10000}}";
DBObject dbObject = (DBObject) JSON.parse(s);
System.out.println("\nFind all: ");

DBCursor cursor = collection.find(dbObject);

try {
    while (cursor.hasNext()) {
        DBObject cur = cursor.next();
        System.out.println(cur);
    }
} finally {
   cursor.close();
}

确保你在 pop 上指定了索引。

db.zips.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.zips",
"name" : "id"
},
{
"v" : 1,
"key" : {
"pop" : 1
},
"ns" : "test.zips",
"name" : "pop_1"
}
]

详情请见以下链接。
http://docs.mongodb.org/manual/reference/operator/max/
如果您对使用聚合运算符 $max 或 $min 感兴趣,以下链接提供了详细信息和示例代码。
http://docs.mongodb.org/ecosystem/tutorial/use-aggregation-framework-with-java-driver/

关于java - 使用java中的运算符将字符串解析为mongodb查询文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326747/

相关文章:

java - 从我在 Java 中读取文件时离开的地方继续

java - 为什么我用 Java 实现的快速排序不起作用?

java - 在 jsni 函数中调用 GWT java 方法

json - 如何在 Go 中将调色板编码和解码为 JSON?

node.js - 如何在 Mongoose 中动态地将值插入对象的属性?

java - 如何在 JSP 中将与给定链接关联的文本显示为超链接?

java - 在自定义反序列化器中调用默认反序列化器不会影响实例

java - 解析 Json 字符串检索所有字段

javascript - MongoDB在数组中添加和删除字段

mongodb - edX MongoDB 连接错误 111