我想要的: 我有一个主要的产品集合,然后我想过滤它们并将它们放在一个单独的集合中。
db.masterproducts.find({category:“scuba gear”})。copyTo(db.newcollection)
当然,我意识到'copyTo'不存在。
我认为我可以使用MapReduce来完成它,因为使用v1.8中新的'out'参数在新集合中创建结果;但是这个新系列不是我原始系列的一个子集。或者是否可以正确使用MapReduce?
为了解决这个问题,我目前正在这样做: 步骤1: / usr / local / mongodb / bin / mongodump --db database --collection masterproducts -q'{category:“scuba gear”}'
第2步: / usr / local / mongodb / bin / mongorestore -d database -c newcollection --drop packages.bson
我的两步法似乎效率很低!
非常感谢任何帮助。
由于
鲍勃
答案 0 :(得分:12)
您可以遍历查询结果并保存每个项目,如下所示:
db.oldCollection.find(query).forEach(function(x){db.newCollection.save(x);})
答案 1 :(得分:4)
答案 2 :(得分:0)
您应该能够使用mapreduce创建子集(使用“out”)。问题是mapreduce有一个特殊的输出格式,所以你的文档将被转换(有一个JIRA票证,以添加对另一种格式的支持,但我目前无法找到它)。它也将是非常无效的:/
将光标复制到集合很有意义,我建议为此创建一张票。
答案 3 :(得分:0)
还有toArray()方法可以使用:
//create new collection
db.creatCollection("resultCollection")
// now query for type="foo" and insert the results into new collection
db.resultCollection.insert( (db.orginialCollection.find({type:'foo'}).toArray())