programing

PyMongo upsert가 "upsert는 bool의 인스턴스여야 합니다" 오류를 발생시킵니다.

abcjava 2023. 3. 17. 19:29
반응형

PyMongo upsert가 "upsert는 bool의 인스턴스여야 합니다" 오류를 발생시킵니다.

Python에서 MongoDB 업데이트를 실행 중입니다.다음 대사가 있습니다.

self.word_counts[source].update({'date':posttime},{"$inc" : words},{'upsert':True})

그러나 다음과 같은 오류가 발생합니다.

raise TypeError("upsert must be an instance of bool")

그렇지만True나한테는 불의 한 예처럼 보여!

이 업데이트를 올바르게 작성하려면 어떻게 해야 합니까?

PyMongo의 세 번째 주장은upsert사전이 아닌 부울을 전달해야 합니다.코드 변경 대상:

self.word_counts[source].update({'date':posttime}, {"$inc" : words}, True)

또는 패스upsert=True키워드 인수로 지정합니다.

self.word_counts[source].update({'date':posttime}, {"$inc" : words}, upsert=True)

당신의 실수는 아마도 에 대해 읽은 것 같습니다.update()MongoDB 문서에 있습니다.의 JavaScript 버전update다음과 같은 옵션 파라미터를 포함하는 세 번째 인수로 객체를 받아들입니다.upsert그리고.multi그러나 Python은 키워드 인수를 함수에 전달할 수 있기 때문에(위치 인수만 있는 JavaScript와 달리) 이는 불필요하며 PyMongo는 이러한 옵션을 옵션 함수 파라미터로 채택합니다.

http://api.mongodb.org/python/2.3/api/pymongo/collection.html#pymongo.collection.Collection.update에 따르면 True가 아닌 키워드로서 upsert를 전달해야 합니다.

self.word_counts[source].update({'date':posttime},{"$inc" : words},**{'upsert':True})

또는

self.word_counts[source].update({'date':posttime},{"$inc" : words},upsert=True)

True를 통과하는 것보다 더 나은 접근법입니다. 예를 들어 다음과 같은 다른 kwargs를 통과하고 싶은 것처럼.safe또는multiarg의 순서를 지키지 않으면 코드가 끊어질 수 있습니다.

upsert는 다음과 같이 위치 매개 변수 중 하나로 전달되어야 합니다.

self.word_counts[source].update(
    {'date':posttime},
    {"$inc" : words},
    True)

또는 키워드 인수로, 다음과 같이

self.word_counts[source].update(
    {'date':posttime},
    {"$inc" : words},
    upsert=True)

언급URL : https://stackoverflow.com/questions/5055797/pymongo-upsert-throws-upsert-must-be-an-instance-of-bool-error

반응형