我正在尝试使用PyMongo在MongoDB中进行批量插入。 我有数以百万计的产品/评论文档要插入MongoDB。这是文件的结构:
{
"_id" : ObjectId("553858a14483e94d1e563ce9"),
"product_id" : "B000GIKZ4W",
"product_category" : "Arts",
"product_brand" : "unknown",
"reviews" : [
{
"date" : ISODate("2012-01-09T00:00:00Z"),
"score" : 3,
"user_id" : "A3DLA3S8QKLBNW",
"sentiment" : 0.2517857142857143,
"text" : "The ink was pretty dried up upon arrival. It was...",
"user_gender" : "male",
"voted_total" : 0,
"voted_helpful" : 0,
"user_name" : "womans_roar \"rohrra\"",
"summary" : "Cute stamps but came with dried up ink"
}
],
"product_price" : "9.43",
"product_title" : "Melissa & Doug Deluxe Wooden Happy Handle Stamp Set"
}
单个产品可以有多个评论。要求是每个product_id插入一个文档,并在review数组中继续附加更多的评论作为子文档。能否请您就如何实现这一目标提供一些指导?此外,为了提高性能,还可以很好地实现批量插入。
答案 0 :(得分:1)
很高兴为性能实现批量插入。
在pymongo中可以执行Ordered bulk write operations或Unordered Bulk Write Operations
要求是每个product_id插入一个文档,并在评论数组中继续附加更多评论作为子文档
您可以使用update_one
或update_many
(Pymongo 3或更新版本)或update
方法将$push
子文档用于reviews
数组
collection.update_one({"_id": <doc_id>}, {"$push": {"reviews": <subdocument>}})
或
collection.update({"_id": <doc_id>}, {"$push": {"reviews": <subdocument>}})
如果没有文档符合给定条件,要插入需要文档,请使用upsert
选项
collection.update({"_id": <doc_id>}, {"$push": {"reviews": <subdocument>}}, upsert=True)