#python #mongodb #pymongo
#python #mongodb #pymongo
Вопрос:
Я вставляю документ в коллекцию с помощью collection.update(), потому что у меня есть postID
разные данные. Я хочу, чтобы при запуске, если сообщение было вставлено в MongoDB, сообщение было обновлено (не вставлять новое сообщение с postID
перекрытием с postID
первым). Это структура моих данных:
comment1 = [
{
'commentParentId': parent_content.text,
'parentId': parent_ID,
'posted': child_time.text,
'postID':child_ID,
'author':
{
'name': child_name.text
},
'content': child_content.text
},
...............
]
Это мой код, который я использовал для вставки данных :
client = MongoClient()
db = client['comment_data2']
db.collection_data = db['comments']
for i in data_comment:
db.collection_data.update_many(
{db.collection_data.find({"postID": {"$in": i["postID"]}})},
{"$set": i},
{'upsert': True}
)
Но у меня ошибка: TypeError: filter must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping
в строке {'upsert': True}
. И {db.collection_data.find({"postID": {"$in": i["postID"]}})}
правильно?
Ответ №1:
вы можете использовать этот код:
db.collection_data.update_many(
{"postId": i["postID"]},
{"$set":i},
upsert = True
)
Комментарии:
1. Ошибка:
SyntaxError: invalid syntax
которыйupsert = True
2. { «upsert»: True } может решить эту ошибку, потому что 3-й аргумент — это тип объекта.
3. Я попробовал ваше решение, но моя ошибка не решена (та же ошибка в сообщении)
4.
db.collection_data.updateMany( {"postId": i["postID"]}, {"$set":i}, { upsert: True } )
5. я попробовал этот код и не получил ошибки. пожалуйста, пришлите мне ваш новый код.