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