保存MongoDB查询的结果

vor*_*rou 7 mongodb mongo-shell

在mongo shell中进行研究时,我经常编写非常复杂的查询,并希望将结果存储在其他集合中.我知道如何做到这一点.forEach():

db.documents.find(query).forEach(function(d){db.results.insert(d)})

但每次写这些东西都很乏味.有更干净的方式吗?我希望语法类似于db.documents.find(query).dumpTo('collectionName').

vor*_*rou 7

这是我将使用的解决方案: db.results.insert(db.docs.find(...).toArray())

但是,仍然有太多的噪音.

UPD:还有一个find使用聚合管道重写的选项.然后你可以使用$out运算符.


Mzz*_*zzl 6

看起来您正在从 mongo shell 进行查询,它允许您用 javascript 编写代码。您可以将查询结果分配给变量:

result = db.mycollection.findOne(my_query)
Run Code Online (Sandbox Code Playgroud)

并将结果保存到另一个集合:

db.result.save(result)
Run Code Online (Sandbox Code Playgroud)

如果要将结果追加到结果集合中,您可能必须删除结果的 _id,以防止重复键错误

编辑:

db.mycollection.findOne({'_id':db.mycollection.findOne()['_id']})
db.foo.save(db.bar.findOne(...))
Run Code Online (Sandbox Code Playgroud)

如果你想保存一个数组,你可以编写一个javascript函数。像下面这样的东西应该可以工作(我还没有测试过):

function save_array(arr) {
    for(var i = 0; i < arr.length; i++) {
        db.result.save(arr[i])
    }
}

...

result = db.mycollection.find(...)
save_array(result)
Run Code Online (Sandbox Code Playgroud)

如果您希望该函数在每次启动 mongo shell 时都可用,您可以将其包含在您的.mongorc.js文件中