Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7-如何读取MongoDB集合中的特定字段_Python_Mongodb - Fatal编程技术网

Python2.7-如何读取MongoDB集合中的特定字段

Python2.7-如何读取MongoDB集合中的特定字段,python,mongodb,Python,Mongodb,我的集合中存储了一些数据,下面是一个通过shell获得的示例。(请忽略文本的语言。) 在这种情况下,我只需要获取“message”字段中包含的文本,因为我需要在这些文本中执行多个操作。因此,过程如下:在我的集合中,我必须获取字段“message”中的所有文本,执行操作,然后将此“message”及其其他属性返回到其正确位置。到目前为止,我的代码是: # -*- coding: utf-8 -*- import preprocessing import pymongo import json fr

我的集合中存储了一些数据,下面是一个通过shell获得的示例。(请忽略文本的语言。)

在这种情况下,我只需要获取
“message”
字段中包含的文本,因为我需要在这些文本中执行多个操作。因此,过程如下:在我的集合中,我必须获取字段
“message”
中的所有文本,执行操作,然后将此
“message”
及其其他属性返回到其正确位置。到目前为止,我的代码是:

# -*- coding: utf-8 -*-
import preprocessing
import pymongo
import json
from pymongo import MongoClient
from unicodedata import normalize
from preprocessing import PreProcessing


if __name__ == '__main__':
    client = MongoClient('localhost:27017')
    collection = client.facebook.dadosColetados1
    try:
        dbmessage = collection.find()
        for text in dbmessage:
            print text
    except Exception, e:
        print str(e)
我无法传递要在查找中使用的
“message”
属性,当我仅使用
find()
时,它会返回文本而不使用utf-8,如:

e7\xf5es institucionais para uma seguran\xe7a p\xfablica mais integrada em todo o Estado.\n\nO secret\xe1rio destacou a import\xe2ncia da manuten\xe7\xe3o do di\xe1logo entres as institui\xe7\xf5es.
解决这种情况的最佳方法是什么


Edit1:jcmetz21 works提出的解决方案

您可以查询数据库并设置投影,以便只返回与“message”键关联的值字段。然后将消息放入列表中

import pymongo

client = pymongo.MongoClient('localhost:27017')
db = client['db_name']

query = {'message': {'$exists': 1}}
projection = {'_id': 0, 'message': 1}

data = list(db['collection_name'].find(query, projection))

message_list = []
for message in data:
    for key, value in message.iteritems():
        message_list.append(value)
现在,“消息列表”将包含您收集的所有消息,您可以对数据执行任何操作:

message_list = [u'message1', u'message2', u'message3', etc.]
编辑#2(注意上面的更改):如果您想保留与其相应消息相关联的id和时间戳,您可以执行以下操作

在projetion中,将“id”和“created_time”键设置为1(“id”:1,“created_time”:1),并从上面更改代码:

message_list = [value for dict in data for key, value in dict.iteritems() if key == 'message']
id_list = [value for dict in data for key, value in dict.iteritems() if key == 'id']
timestamp_list = [value for dict in data for key, value in dict.iteritems() if key == 'created_time']

# to print all of your messages
for message in message_list:
    print message
现在,您可以查看所有消息并对它们执行所需操作,无论是通过迭代更新所有消息还是通过索引更新一些消息

然后,您可以将所有3个列表配对,以便知道哪些数据与哪些数据关联

pair_up = zip(message_list, id_list, timestamp_list)

for x, y, z in pair_up:
    print "The message " + x + " has id " + y + " and timestamp " + z

您可以查询数据库并设置投影,以便只返回与“message”键关联的值字段。然后将消息放入列表中

import pymongo

client = pymongo.MongoClient('localhost:27017')
db = client['db_name']

query = {'message': {'$exists': 1}}
projection = {'_id': 0, 'message': 1}

data = list(db['collection_name'].find(query, projection))

message_list = []
for message in data:
    for key, value in message.iteritems():
        message_list.append(value)
现在,“消息列表”将包含您收集的所有消息,您可以对数据执行任何操作:

message_list = [u'message1', u'message2', u'message3', etc.]
编辑#2(注意上面的更改):如果您想保留与其相应消息相关联的id和时间戳,您可以执行以下操作

在projetion中,将“id”和“created_time”键设置为1(“id”:1,“created_time”:1),并从上面更改代码:

message_list = [value for dict in data for key, value in dict.iteritems() if key == 'message']
id_list = [value for dict in data for key, value in dict.iteritems() if key == 'id']
timestamp_list = [value for dict in data for key, value in dict.iteritems() if key == 'created_time']

# to print all of your messages
for message in message_list:
    print message
现在,您可以查看所有消息并对它们执行所需操作,无论是通过迭代更新所有消息还是通过索引更新一些消息

然后,您可以将所有3个列表配对,以便知道哪些数据与哪些数据关联

pair_up = zip(message_list, id_list, timestamp_list)

for x, y, z in pair_up:
    print "The message " + x + " has id " + y + " and timestamp " + z


你能不能给我们举个最简单的例子?我快速浏览了一下,得出结论,这段代码的95%是不相关的。勇敢的年轻人可能刚刚觉醒并准备完成这项任务,但像我这样懒散疲惫的流浪汉会认为,如果可能的话,不必删除95%的代码来进行本地测试是很好的?python 3:您可以将消息更改为
字节
结构,然后将其解码为“latin-1”。这将打印葡萄牙语(?)字符。@Torxed我说我想知道如何只使用mongo集合中某个字段中包含的数据。一旦您获得了该数据,请执行一些操作并将其返回给其他数据接收者。我举了一个例子,说明这些数据是如何存储在银行的,举了一个例子,说明了我是如何读取和获取这些数据的。只有我不能一次返回一个文本。@LeandroSantos正如我所说的,
def status\u processing(corpus):
中95%的内容可以从这个示例中删除,并且仍然可以理解您的观点。这只是一个建议,但保持你的例子简短会让你的问题面向更多的帮助者。@Torxed现在我明白你的意思了。我编辑代码是为了变得更好。你能给我们一个简单的工作示例吗?我快速浏览了一下,得出结论,这段代码的95%是不相关的。勇敢的年轻人可能刚刚觉醒并准备完成这项任务,但像我这样懒散疲惫的流浪汉会认为,如果可能的话,不必删除95%的代码来进行本地测试是很好的?python 3:您可以将消息更改为
字节
结构,然后将其解码为“latin-1”。这将打印葡萄牙语(?)字符。@Torxed我说我想知道如何只使用mongo集合中某个字段中包含的数据。一旦您获得了该数据,请执行一些操作并将其返回给其他数据接收者。我举了一个例子,说明这些数据是如何存储在银行的,举了一个例子,说明了我是如何读取和获取这些数据的。只有我不能一次返回一个文本。@LeandroSantos正如我所说的,
def status\u processing(corpus):
中95%的内容可以从这个示例中删除,并且仍然可以理解您的观点。这只是一个建议,但保持你的例子简短会让你的问题面向更多的帮助者。@Torxed现在我明白你的意思了。我编辑代码是为了变得更好。如果我想在一天结束时创建一个“消息”列表,为什么要使用
find()
?因为首先需要查找数据库/集合中包含“消息”键的所有文档。或者,如果你想定位一条特定的消息,你也可以通过更新查询字段来定位。最后,我可以说,消息1属于id x,依此类推?@jcmetz21如何将文本设置为utf-8?在mongo shell中,它们是utf-8格式的,但是如果我通过代码显示它们,它们将被解码。示例:
j\xe1 que s\xe3o
您不必担心编码问题。如果您反复浏览列表并分别打印每个部分,它们应该会显示为干净的…
对于更新的配对中的i:print i[0],“responsed to”,i[1]
您为什么要使用
find()
如果我想在一天结束时创建一个“消息”列表,因为首先需要在数据库/集合中查找所有文档