2017-09-08 6 views
0

Im nouveau dans MongoDB et processus de texte. J'ai une base de données avec des tweets analysés. Exemple:MongoDB/PyMongo Comment supprimer un élément concret du tableau

{ 
    "_id" : ObjectId("59b24aa1a0c99b0b85732406"), 
    "idt" : "906060929829183489", 
    "tweet" : [ 
     "RT", 
     "@moocowpong1", 
     ":", 
     "@whitequark", 
     "isn't", 
     "the", 
     "cloud", 
     "just", 
     "your", 
     "data", 
     "relocating", 
     "to", 
     "san", 
     "francisco" 
    ], 
    "createdDate" : ISODate("2017-09-08T07:45:34Z"), 
    "userName" : "Fiora Aeterna", 
    "userLocation" : "San Jose, CA", 
    "geo" : null, 
    "geoCoord" : null, 
    "Lang" : "en", 
    "retweet_count" : 0, 
    "sentimiento" : "", 
    "score_tag" : "" 
} 

Je tokenisé les mots dans le tweet. L'étape suivante consiste à supprimer les mots vides.

Mon code:

for doc in tweets.find({},{'tweet': 1}).limit(1): 
    print (doc) 
    for term in (doc['tweet']): 
     if set(stop).intersection(term.split()): 
      print ("Found One") 
      tweets.update({ 'idt': doc['_id'] }, { '$pull': { 'tweet': { '$eq': term } } }) 

stop est un tableau avec des mots vides. Je voudrais supprimer l'élément de la série de tweets, mais mon code échoue avec:

raise WriteError(error.get("errmsg"), error.get("code"), error) pymongo.errors.WriteError: unknown top level operator: $eq

Je ne sais pas si ma mise à jour est correcte, pouvez-vous me aider?

Mon objetif final est le registre comme (similaire):

{ 
    "_id" : ObjectId("59b24aa1a0c99b0b85732406"), 
    "idt" : "906060929829183489", 
    "tweet" : [ 
     "@moocowpong1", 
     "@whitequark", 
     "cloud", 
     "just", 
     "data", 
     "relocating", 
     "san", 
     "francisco" 
    ], 
    "createdDate" : ISODate("2017-09-08T07:45:34Z"), 
    "userName" : "Fiora Aeterna", 
    "userLocation" : "San Jose, CA", 
    "geo" : null, 
    "geoCoord" : null, 
    "Lang" : "en", 
    "retweet_count" : 0, 
    "sentimiento" : "", 
    "score_tag" : "" 
} 
+0

Mise à jour l'erreur: augmenter WriteError (error.get (« errmsg »), error.get (« code »), erreur) pymongo.errors.WriteError: opérateur de niveau supérieur inconnu: $ eq –

Répondre

0

Vous devez utiliser $in opérateur ne $eq. Vous n'avez donc pas besoin de contrôler chaque mot d'arrêt dans une boucle for. Vous pouvez donner tous les mots d'arrêt à la fois et tirer tous dans une requête comme ceci:

db.collection.update({}, { $pull: { "tweet": { $in: ["stopWord1", "stopWord2"] } } })