【问题标题】:How to copy select documents from one collection to another with pymongo?如何使用 pymongo 将选定文档从一个集合复制到另一个集合?
【发布时间】:2015-10-23 16:45:28
【问题描述】:

我一直在将数据从 twitter 流式传输到 mongo 数据库中。但是我发现我没有错误地格式化搜索,所以我从各地而不是我想要的一个城市获取数据(我通过检查城市名称是否出现在“位置”或“名称”下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 wrapping,我找到了here,但它仍然不起作用。

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

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

 }'''))

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

AttributeError: 'Cursor' 对象没有属性 'forEach'

我不知道出了什么问题,也不知道如何解决这个问题。谁能告诉我我可以做些什么来解决这个问题,或者将文档复制到新集合的更好方法?

【问题讨论】:

    标签: mongodb foreach pymongo


    【解决方案1】:

    光标已经能够遍历您不需要 forEeach 的结果。试试

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

    【讨论】:

    • 我试过了,它似乎可以工作,但它似乎无法像这样遍历 find() 查询,我收到此错误:TypeError: string indices must be integers ,而不是 _sre.SRE_Pattern
    • 没关系,这是查询中的语法错误!谢谢:)
    猜你喜欢
    • 2023-03-13
    • 2017-02-08
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多