我试图了解MongoDB与传统RDBMS相比有多快。为此,我使用Java来尝试通过定义一个MongoDB函数来获取传统SQL连接的结果,该函数将在将另一个对象嵌入其中后返回一个对象:
s_with_user = function(rows){
var result=[]
db.subscriptions.find().limit(rows).forEach( function(s) {
s.user= db.users.find({id: s.user_id});
result.push( s );
});
return result;
}
然后,我使用:
DB db = new Mongo("localhost", 27017).getDB("test");
Object result = db.eval("s_with_user(1000)");
测量最后一个语句所花费的时间,我确信MongoDB正在运行命令并评估我想要的数据。但是,result
对象始终为null
。
我怎样才能检查结果呢?
答案 0 :(得分:0)
首先,Stennie认为eval()不是在MongoDB中进行连接的正确方法。
但是,要尝试回答您的问题,它会以这种方式运作:
String f = "function(rows) { ... }"; DB db = new Mongo("localhost", 27017).getDB("test"); Object result = db.eval( f, 1000 );
此外,您的“加入”功能需要进行小幅修正:它应该使用findOne
代替find
:
s.user = db.users.findOne({id: s.user_id});