我使用以下查询从mongo-db获取数据:
db.FetchedUrl.aggregate({
"$match": {
"type": db.eval('echoFunction(\"news\")')
}
})
这是我的存储功能:
db.system.js.save({
_id: "echoFunction",
"value": function(x){return x}
})
此代码在mongo-db shell上运行正常。如何编写等效的Java代码来聚合调用存储的函数?
答案 0 :(得分:1)
我认为你需要了解实际在这里发生了什么。以此为例,您可以在shell中自己完成。所以在那里声明一个变量:
var param = db.eval('echoFunction(\"news\")');
然后像这样再次聚合:
db.FetchedUrl.aggregate({
"$match": {
"type": param
}
})
这是事情。您知道您的服务器上没有名为“param”的“已存储”变量,但当然结果与之前的结果相同。
这是因为,与您所做的相同一样,此值在“shell”中评估 之前被发送到服务器。
因此,在这种情况下,您的“服务器端”功能在执行聚合时不提供任何服务器侧评估。
这意味着您编写的任何“Java”代码将预先评估到发送到服务器之前发送的BSON文档中
因此,无论您使用什么方式“获取”此值,您都需要在“Java”代码中编写它。然后通过驱动程序提供的方法将该值作为BSON文档中相同键的值放入。
MongoDB网站上的aggregation with the Java driver有一些注释。