如何使用pymongo将选择的文档从一个集合复制到另一个集合?

时间:2015-07-31 21:52:20

标签: mongodb foreach pymongo

我一直在将数据从twitter传输到mongo数据库。但是我发现我没有错误地格式化搜索,所以我从所有地方而不是我想要的一个城市获得数据(我通过检查城市名称是否出现在' location&#找到位置39;或者'在json中的用户'。

我想将正确的文件复制到新的收藏中,但我发现在pymongo中几乎不可能做到!我使用pymongo而不是shell,因为我使用正则表达式来搜索城市名称(这里有很多同义词)。

regex=re.compile(<\really long regular expression of city names>)

我已经能够正确使用find()和正则表达式;它只返回我正在寻找的东西:

db.coll.find({'$or':[{'user.location':{'$in':[regex]}},{'user.name':{'in':[regex]}}]})

我只需要将它返回的内容复制到一个新的集合中,但它证明是困难的。

我尝试this method,尝试forEach()尝试使用bson包装来复制文档,我发现here,但它仍然无法正常工作。

 db.coll.find({'$or':[{'user.location':{'$in':[regex]}},{'user.name':{'in' [regex]}}]})\
.forEach(bson.Code( '''

function(doc) { 
   db.subset.insert(doc);

 }'''))

具体来说,我尝试这个时得到的错误是

AttributeError:&#39;光标&#39;对象没有属性&#39; forEach&#39;

我不知道出了什么问题,或者我怎么能解决这个问题。任何人都能告诉我我可以做些什么来解决这个问题,或者更好的方法将文件复制到新的收藏品中?

1 个答案:

答案 0 :(得分:1)

游标已经能够完成您不需要forEeach的结果。尝试

for tweet in db.coll.find({'$or':[{'user.location':{'$in':[regex]}},{'user.name':{'in' [regex]}}]}):
    db.subset.insert(tweet)