Python 使用pymongo查询大型Mongodb集合
我想查询我的mongodb集合,它有超过5k条记录,每条记录都有键值对,如Python 使用pymongo查询大型Mongodb集合,python,python-3.x,mongodb,pymongo,Python,Python 3.x,Mongodb,Pymongo,我想查询我的mongodb集合,它有超过5k条记录,每条记录都有键值对,如 { "A" : "unique-value1", "B" : "service1", "C" : 1.2321, ... }, ... 这里A总是有unique值,B有service1,service2,….service8和C是一些浮点值 我想要的是用键值对得到这样一个记录 { "A" : "unique-value1", "B" : "service1", "C" : 1.2321 } { "A
{
"A" : "unique-value1",
"B" : "service1",
"C" : 1.2321,
...
},
...
这里A
总是有unique
值,B
有service1,service2,….service8
和C是一些浮点值
我想要的是用键值对得到这样一个记录
{
"A" : "unique-value1",
"B" : "service1",
"C" : 1.2321
}
{
"A" : "unique-value2",
"B" : "service2",
"C" : 0.2321
}
{
"A" : "unique-value3",
"B" : "service1",
"C" : 3.2321
}
我不知道该怎么做,早些时候我使用了MapReduce,但当时我只需要使用A
和C
键值对生成记录,但现在因为我还需要B
我不知道该怎么做。
这就是我在做的
map_reduce = Code("""
function () {
emit(this.A, parseFloat(this.C));
}
""")
result = my_collection.map_reduce(map_reduce, reduce, out='temp_collection')
for doc in result.find({}):
out = dict()
out[doc['_id']] = doc['_id']
out['cost'] = doc['value']
out_handle.update_one(
{'A': doc['_id']},
{'$set': out},
upsert=True
)
除非我误解了你的需要,否则看起来你让事情变得更难了。只需使用find方法的第二个参数投影所需的键
for record in db.testcollection.find({}, { 'A': 1, 'B': 1, 'C': 1}):
db.existingornewcollection.replace_one({'_id': record['_id']}, record, upsert=True)
完整示例:
from pymongo import MongoClient
from bson.json_util import dumps
db = MongoClient()['testdatabase']
db.testcollection.insert_one({
"A": "unique-value1",
"B": "service1",
"C": 1.2321,
"D": "D",
"E": "E",
"F": "F",
})
for record in db.testcollection.find({}, { 'A': 1, 'B': 1, 'C': 1}):
db.existingornewcollection.replace_one({'_id': record['_id']}, record, upsert=True)
print(dumps(db.existingornewcollection.find_one({}, {'_id': 0}), indent=4))
给出:
{
"A": "unique-value1",
"B": "service1",
"C": 1.2321
}
请告诉我到目前为止你都试了些什么。困难是什么?hi@prasad我已经更新了代码,之前我只保存了两个字段,所以我使用了map reduce,但是现在我需要
{“A”:“unique-value1”,“B”:“service1”,“C”:1.2321}
这看起来你只是想从源文档中投影几个字段(“A”,“B”和“C”):。