这并不容易,但你可以做到:-)。最大的挑战是创建 bson 查询并使用 mongodb 的 runCommand 语法。这是一些示例代码和您可以在 docs.mongodb.org 中找到的数据。
示例 SQL 查询可能如下所示:
SELECT state, SUM(pop) AS totalPop FROM zips GROUP BY state
HAVING pop > (10000)
在 mongoDB shell 中,您将运行类似这样的东西。
db.zipcodes.aggregate( { $group :
{ _id : "$state",
totalPop : { $sum : "$pop" }
} },
{ $match : {totalPop : { $gte : 10000 } } }
)
您可以使用命令 db.runCommand 运行相同的命令,该命令具有以下聚合框架的默认语法:
db.runCommand(
{ aggregate : "article", pipeline : [
{ $project : {author : 1,tags : 1}
},
{ $unwind : "$tags" },
{ $group : {
_id : "$tags",
authors : { $addToSet : "$author" }
}
}
] }
);
现在您可以使用以下代码在 rmongodb 中执行相同的操作:
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "aggregate", "zips")
mongo.bson.buffer.start.array(buf, "pipeline")
mongo.bson.buffer.start.object(buf, "$group")
mongo.bson.buffer.append(buf, "_id", "$state")
mongo.bson.buffer.start.object(buf, "totalPop")
mongo.bson.buffer.append(buf, "$sum", "$pop")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.start.object(buf, "$match")
mongo.bson.buffer.start.object(buf, "totalPop")
mongo.bson.buffer.append(buf, "$gte", "10000")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.finish.object(buf)
query <- mongo.bson.from.buffer(buf)
res <- mongo.command(mongo, "test", query)
out <- mongo.bson.to.list(res)
如果这不起作用,请告诉我。