Проверять, если есть tweets повторенные в MongoDB

У меня есть метод, который, благодаря Twython, сохраняет tweets в таком MongoDB каков, находится в моем вопросе Maintaining в mongodb with tweets that матч в given tag

def getSearchTagTwitter(hashtag):
    db = connexMongoDB()
    t = loginTwython()
    search = t.search(q=hashtag, count=100)
    data = search['statuses']
    try:
        db.twittersearch.create_index('id_str')
        for tweet in data:
            try :
                db.twittersearch.insert_one(tweet)
            except :
                db.twittersearch.update_one({"id_str": tweet['id_str']}, tweet) 
    except Exception:
        print "Error al buscar hashtag"
        time.sleep(60*15) #15 minutos
        getSearchTagTwitter(hashtag)

Я думаю, что оно не функционирует правильно, и я хочу подтвердить, если стоимость id_str не будь повторен через MongoDB shell и(или) с Пайтона. Я попытался со следующим, но он не дает мне никакого результата:

db.twittersearch.find({'id_str':{$in:["numerodeid_str"]}})

Я издаю: Я упрощаю вопрос: С Пайтона, как он мог бы подтверждать, не ли имею я повторенные в уже созданном mongodb? В настоящее время я присоединяюсь с pymongo, и могу видеть, что я создал коллекцию.

2
задан 23.05.2017, 15:39
2 ответа

Чтобы записывать в твоей коллекции MongoDB ты используешь id_str:

db.twittersearch.create_index('id_str')
# ... 
db.twittersearch.update_one({"id_str": tweet['id_str']}, tweet) 

И сделав query, ты используешь неправильное поле str_id (наоборот id_str):

db.twittersearch.find({'str_id':{$in:["numerodestr_id"]}})

Правильное было бы:

db.twittersearch.find({'id_str':{$in:["numerodestr_id"]}})

По крайней мере, просвет, который только был бы ошибкой tipeo или копируемый / прикрепленный


Обновление после редактирования

Я создал простой рукописный шрифт, чтобы отвечать твой случай используя hashtag python и получая только 10 tweets:

# -*- coding: utf-8 -*-
from pymongo import MongoClient
from twython import Twython


client = MongoClient('localhost', 27017)
db = client.test

CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'

def get_tweets(hashtag='wtf'):
    twitter = Twython(CONSUMER_KEY, CONSUMER_SECRET)
    search = twitter.search(q=hashtag, count=10)
    data = search['statuses']
    for tweet in data:
        try:
            db.twittersearch.insert_one(tweet)
        except Exception, e:
            print "Error al insertar: %s" % e
            db.twittersearch.update_one({'id_str': tweet['id_str']}, tweet)

if __name__ == '__main__':
    get_tweets(hashtag='python')

И он не дает мне проблемы, если я делаю какие-то queries доказательства в консоли MongoDB:

> db.twittersearch.find({}, {"id_str": 1, "_id": 0})
{ "id_str" : "700315462568120320" }
{ "id_str" : "700315461850804224" }
{ "id_str" : "700315438169747457" }
{ "id_str" : "700315421900148736" }
{ "id_str" : "700315421887619076" }
{ "id_str" : "700315350299049988" }
{ "id_str" : "700315332838301698" }
{ "id_str" : "700315321689833473" }
{ "id_str" : "700315301594796032" }
{ "id_str" : "700315293177008128" }

> db.twittersearch.find({"id_str": {$in: ["700315461850804224"]}})
{ "_id" : ObjectId("56c5caae2fbb7114134d0bac"), "contributors" : null, "truncated" : false, "text" : "RT @dmeishappy_: กระเป๋าของฟานี่คือ DIORAMA MINI BAG \nMETALLIC BLUE PYTHON ราคาราวๆ 98,000~ บาท #WelcomeTIFFANYtoThailand https://t.co/UnDp…", "is_quote_status" : false, "in_reply_to_status_id" : null, "id" : NumberLong("700315461850804224"), "favorite_count" : 0, "source" : "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", "retweeted" : false, "coordinates" : null, "entities" : { "symbols" : [ ], "user_mentions" : [ { "id" : 299006216, "indices" : [ 3, 15 ], "id_str" : "299006216", "screen_name" : "dmeishappy_", "name" : "น้องสดใส" } ], "hashtags" : [ { "indices" : [ 96, 121 ], "text" : "WelcomeTIFFANYtoThailand" } ], "urls" : [ ], "media" : [ { "source_user_id" : 299006216, "source_status_id_str" : "700301141263806464", "expanded_url" : "http://twitter.com/dmeishappy_/status/700301141263806464/photo/1", "display_url" : "pic.twitter.com/UnDpsznRJ6", "url" : "https://t.co/UnDpsznRJ6", "media_url_https" : "https://pbs.twimg.com/media/Cbf4Ka0UkAEWmhH.jpg", "source_user_id_str" : "299006216", "source_status_id" : NumberLong("700301141263806464"), "id_str" : "700301124960555009", "sizes" : { "large" : { "h" : 1024, "resize" : "fit", "w" : 669 }, "small" : { "h" : 520, "resize" : "fit", "w" : 340 }, "medium" : { "h" : 918, "resize" : "fit", "w" : 600 }, "thumb" : { "h" : 150, "resize" : "crop", "w" : 150 } }, "indices" : [ 122, 140 ], "type" : "photo", "id" : NumberLong("700301124960555009"), "media_url" : "http://pbs.twimg.com/media/Cbf4Ka0UkAEWmhH.jpg" } ] }, "in_reply_to_screen_name" : null, "in_reply_to_user_id" : null, "retweet_count" : 152, "id_str" : "700315461850804224", "favorited" : false, "retweeted_status" : { "contributors" : null, "truncated" : false, "text" : "กระเป๋าของฟานี่คือ DIORAMA MINI BAG \nMETALLIC BLUE PYTHON ราคาราวๆ 98,000~ บาท #WelcomeTIFFANYtoThailand https://t.co/UnDpsznRJ6", "is_quote_status" : false, "in_reply_to_status_id" : null, "id" : NumberLong("700301141263806464"), "favorite_count" : 13, "source" : "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>", "retweeted" : false, "coordinates" : null, "entities" : { "symbols" : [ ], "user_mentions" : [ ], "hashtags" : [ { "indices" : [ 79, 104 ], "text" : "WelcomeTIFFANYtoThailand" } ], "urls" : [ ], "media" : [ { "expanded_url" : "http://twitter.com/dmeishappy_/status/700301141263806464/photo/1", "display_url" : "pic.twitter.com/UnDpsznRJ6", "url" : "https://t.co/UnDpsznRJ6", "media_url_https" : "https://pbs.twimg.com/media/Cbf4Ka0UkAEWmhH.jpg", "id_str" : "700301124960555009", "sizes" : { "large" : { "h" : 1024, "resize" : "fit", "w" : 669 }, "small" : { "h" : 520, "resize" : "fit", "w" : 340 }, "medium" : { "h" : 918, "resize" : "fit", "w" : 600 }, "thumb" : { "h" : 150, "resize" : "crop", "w" : 150 } }, "indices" : [ 105, 128 ], "type" : "photo", "id" : NumberLong("700301124960555009"), "media_url" : "http://pbs.twimg.com/media/Cbf4Ka0UkAEWmhH.jpg" } ] }, "in_reply_to_screen_name" : null, "in_reply_to_user_id" : null, "retweet_count" : 152, "id_str" : "700301141263806464", "favorited" : false, "user" : { "follow_request_sent" : null, "has_extended_profile" : true, "profile_use_background_image" : true, "default_profile_image" : false, "id" : 299006216, "profile_background_image_url_https" : "https://pbs.twimg.com/profile_background_images/449190232508747776/eVbVkbBq.png", "verified" : false, "profile_text_color" : "3E3417", "profile_image_url_https" : "https://pbs.twimg.com/profile_images/699491224382676992/1RCFrGlC_normal.jpg", "profile_sidebar_fill_color" : "6E096E", "entities" : { "description" : { "urls" : [ ] } }, "followers_count" : 12731, "profile_sidebar_border_color" : "000000", "id_str" : "299006216", "profile_background_color" : "ECEEE0", "listed_count" : 15, "is_translation_enabled" : false, "utc_offset" : -28800, "statuses_count" : 123360, "description" : "ก็แค่ทวิตเตอร์จำเป็นต้องจริงจังปร้าาาาา", "friends_count" : 260, "location" : "คิดให้ดีๆก่อนฟอลโล่ว", "profile_link_color" : "E81C4F", "profile_image_url" : "http://pbs.twimg.com/profile_images/699491224382676992/1RCFrGlC_normal.jpg", "following" : null, "geo_enabled" : true, "profile_banner_url" : "https://pbs.twimg.com/profile_banners/299006216/1455606704", "profile_background_image_url" : "http://pbs.twimg.com/profile_background_images/449190232508747776/eVbVkbBq.png", "screen_name" : "dmeishappy_", "lang" : "en", "profile_background_tile" : false, "favourites_count" : 4013, "name" : "น้องสดใส", "notifications" : null, "url" : null, "created_at" : "Sun May 15 10:19:10 +0000 2011", "contributors_enabled" : false, "time_zone" : "Pacific Time (US & Canada)", "protected" : false, "default_profile" : false, "is_translator" : false }, "geo" : null, "in_reply_to_user_id_str" : null, "possibly_sensitive" : false, "lang" : "und", "created_at" : "Thu Feb 18 12:49:37 +0000 2016", "in_reply_to_status_id_str" : null, "place" : null, "metadata" : { "iso_language_code" : "und", "result_type" : "recent" } }, "user" : { "follow_request_sent" : null, "has_extended_profile" : true, "profile_use_background_image" : true, "default_profile_image" : false, "id" : 594309538, "profile_background_image_url_https" : "https://pbs.twimg.com/profile_background_images/568400749038534656/SJRD7Zj6.jpeg", "verified" : false, "profile_text_color" : "3E4415", "profile_image_url_https" : "https://pbs.twimg.com/profile_images/694513699344687106/DCKLb8Mz_normal.jpg", "profile_sidebar_fill_color" : "99CC33", "entities" : { "url" : { "urls" : [ { "url" : "https://t.co/TKchFkPats", "indices" : [ 0, 23 ], "expanded_url" : "http://instagram.com/beastly_snowy", "display_url" : "instagram.com/beastly_snowy" } ] }, "description" : { "urls" : [ ] } }, "followers_count" : 319, "profile_sidebar_border_color" : "FFFFFF", "id_str" : "594309538", "profile_background_color" : "352726", "listed_count" : 10, "is_translation_enabled" : false, "utc_offset" : 25200, "statuses_count" : 79299, "description" : "#SONE @GirlsGeneration || Hwang Miyoung Stepanie Tiffany || // Taeny // Taeyeon Jessica Sunny Hyoyeon Yuri Sooyoung  YoonA SeoHyun // #notep #เอมน้ำ #OT9", "friends_count" : 255, "location" : "#Kamphaeng Phet Thailand", "profile_link_color" : "D02B54", "profile_image_url" : "http://pbs.twimg.com/profile_images/694513699344687106/DCKLb8Mz_normal.jpg", "following" : null, "geo_enabled" : true, "profile_banner_url" : "https://pbs.twimg.com/profile_banners/594309538/1452856105", "profile_background_image_url" : "http://pbs.twimg.com/profile_background_images/568400749038534656/SJRD7Zj6.jpeg", "screen_name" : "yeppoNOOO", "lang" : "en", "profile_background_tile" : true, "favourites_count" : 3413, "name" : "ONIAP° #ขุ่นแม่มา♥", "notifications" : null, "url" : "https://t.co/TKchFkPats", "created_at" : "Wed May 30 04:51:51 +0000 2012", "contributors_enabled" : false, "time_zone" : "Bangkok", "protected" : false, "default_profile" : false, "is_translator" : false }, "geo" : null, "in_reply_to_user_id_str" : null, "possibly_sensitive" : false, "lang" : "und", "created_at" : "Thu Feb 18 13:46:31 +0000 2016", "in_reply_to_status_id_str" : null, "place" : null, "metadata" : { "iso_language_code" : "und", "result_type" : "recent" } }

Я думаю, что проблема с другой стороны, возможно, было что-то еще в тебе код, который проходил бы с нами.

1
ответ дан 24.11.2019, 14:52
  • 1
    Perd и # 243; n, это была ошибка, написав это. – Elena 17.02.2016, 19:43
  • 2
    Я приспособил ты c и # 243; я говорю и уже у меня не были ning и # 250; n проблема. Я исследовал немного м и # 225; s, y он вероятный, что s и # 243; упомянули о hashtag 1 раз в них и #250; ltimos 7 d и # 237; схвати. И ввиду того, что не имей, и # 237; в ning и # 250; n изменение, он не менялся в mongodb. Хотя он остается, не придавая квадратную форму мне тому, что в каждом iteraci и # 243; n сохранять и # 225; новый реестр... В любом случае, большое спасибо из-за всего ^^ – Elena 18.02.2016, 17:51

Я добавляю другое решение, которое я нашел, которое состоит в том, чтобы использовать update со стоимостью upsert в True. Так sobrescribirá, если есть какой-то дубликат, и будет создан новый реестр, если он не будет существовать.

db.twittersearch.update({'id_str': tweet['id_str']}, tweet, upsert=True)
1
ответ дан 24.11.2019, 14:52