我正在寻找基于某些过滤器从任何现有集合创建新集合的简洁有效方法。我在一天内多次这样做,目前正在打印过滤后的结果进行记录并将其存储为json并再次将其导入集合(这肯定是一种漫长而奇怪的方式,我知道)。 任何帮助都会很棒。
尝试使用:
db.getCollection('reviews').find({},{"asin":1,summary:1,reviewText:1,_id:0}).forEach( function(x){ db.subset.save(x)})

失败,错误
答案 0 :(得分:0)
你可以用这个:
db.mySourceCollection.find().forEach( function(x){ db.theDestinationCollection.save(x)});
只需为过滤器添加标准,您甚至可以使用投影删除某些字段......
编辑:感谢您的截图,我已经能够发现您使用的是robomongo ...此问题已经归档here。我建议你仔细阅读,显然应该在最新版本上修复,但我不使用它,所以我没有测试自己。编辑2:你可能会很幸运并使用批量操作解决它......
var bulk = db.mySourceCollection.initializeUnorderedBulkOp();
db.mySourceCollection.find().forEach( function(x){ bulk.insert(x)});
bulk.execute();
使用这种技术,你可能会更幸运,因为它会加速并且不会达到超时...我不确定如果客户端在执行期间断开连接会发生什么但我认为我们可以安全地假设写将继续。这才是有趣的。