TypeError:insert()至少需要2个参数(给定1个)mongoDB

时间:2014-02-02 09:04:56

标签: python mongodb

抱歉,如果这是一个愚蠢的问题,但这是我第一次使用python和Mongo DB。 无论如何,我遇到的问题是我试图插入()一个字符串存储在我的数据库中 - 通过read() - 用循环输入数据然后在单个字符串中给出insert()第1行和第2行(这可能是一种混乱的方式,但我不知道让read()一次读取2行。) - 但是在运行时我得到这个错误:TypeError:insert()至少需要2个参数( 1给出)

from pymongo import MongoClient

client = MongoClient("192.168.1.82", 27017)
db = client.local
collection = db.JsonDat

file_object = open('a.txt', 'r')

post=collection.insert()

readingData = True
def readData():
    while readingData==True:
        line1 = file_object.readline()
        line2 = file_object.readline()

        line1
        line2

        if line1 or line2 == "":
            readingData = False

        dbData = line1 %line2
        post(dbData)
    print collection.find()

2 个答案:

答案 0 :(得分:4)

代码的相关部分是:

post=collection.insert()

你在做什么是不用参数调用insert方法,而不是将该方法分配给post。由于insert method至少将您尝试插入的文档作为其参数,并且您没有传递任何内容,因此它只接收(隐式)对象本身;也就是说,一个参数而不是它期望的至少二个。

删除括号应该有效。

答案 1 :(得分:1)

似乎已经指出您正在尝试在insert方法上创建closure。在这种情况下,我没有看到这一点,因为它永远不会被传递到任何地方和/或需要引用范围之外的东西。只是在你真正想要使用它的地方插入带参数,即你用参数调用post的地方。

很高兴将已经收到的答案正确投票。但是,我想在此指出您似乎正在访问local数据库。可以通过检查新的mongo安装并在数据库列表中看到它来找到它。

MongoDB会在您引用它们时自动创建数据库和集合,并提交您的第一个插入。

我无法强调DO NOT USE THE LOCAL DATABASE。它仅供内部使用,只会导致您在此处发布更多问题。