如何在MongoDB推文集中找到非转发?

时间:2017-06-08 03:16:21

标签: python regex mongodb twitter

我在MongoDB集合中收集了大约140万条推文。我想找到所有不转发的东西,并且正在使用Python。文件的结构如下:

{
  '_id': ObjectId('59388c046b0c1901172555b9'), 
  'coordinates': None, 
  'created_at': datetime.datetime(2016, 8, 18, 17, 17, 12),
  'geo': None,
  'is_quote': False,
  'lang': 'en',
  'text': b'Adam Cole Praises Kevin Owens + A Preview For Next Week\xe2\x80\x99s',
  'tw_id': 766323071976247296,
  'user_id': 2231233110,
  'user_lang': 'en',
  'user_loc': 'main; @Kan1shk3',
  'user_name': 'sheezy0',
  'user_timezone': 'Chennai'
}

我可以编写一个查询来查找上面的特定推文:

twitter_mongo_collection.find_one({
  'text': b'Adam Cole Praises Kevin Owens + A Preview For Next Week\xe2\x80\x99s'
})

但是当我尝试查找转推时,我的代码不起作用,例如我尝试找到任何以这样开头的推文:

'text': b'RT some tweet'

使用此查询:

find_one( {'text': {'$regex': "/^RT/" } }  )

它不会返回错误,但它找不到任何内容。我怀疑它在文本开始之前就与'b'有关。我知道我还需要在某处放置'$ not:',但不确定在哪里。

谢谢!

2 个答案:

答案 0 :(得分:0)

看起来您的正则表达式搜索正在尝试匹配字符串
/Applications/MAMP/logs
但是你想匹配像
这样的字符串 b'RT'

尝试使用此正则表达式而不是 b'RT some text afterwards'

答案 1 :(得分:0)

我必须解码'文字'被编码为二进制的字段。然后我就可以使用

  

twitter_mongo_collection.find_one({{&#39; text&#39;:{&#39; $ not&#39;:re.compile(&#34; ^ RT。*&#34;)}})< / p>

找到所有未以&#34; RT&#34;。

开头的文件