第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 MongoEngine 中批量寫入

在 MongoEngine 中批量寫入

函數(shù)式編程 2022-06-14 16:36:24
MongoDB 和 PyMongo 都支持批量寫入或一次插入多個文檔。MongoDB:db.collection_name.insertMany()PyMongo:collection.insert([list_of_objects])但是出于相同的目的,我在 MongoEngine 中找不到類似的東西。有多種方法,但都一次插入一項。那么真的沒有類似的東西嗎?由于 mongoengine 是在 PyMongo 上構(gòu)建的。我的要求是我一次要插入大量數(shù)據(jù),但是由于處理每個文檔都需要時間,因此我必須進行盲插入以提高性能。PyMongo 具有執(zhí)行此操作的功能,因此如果 mongoengine 沒有類似的功能,是否可以僅為此使用 mongoengine 的 pymongo 實例?
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

對于批量插入,您有 2 個選項:


1)皮蒙戈


如果您dict的 's 被格式化為應(yīng)該存儲的確切形狀,那么使用 pymongo,您將獲得更好的性能,因為您將節(jié)省 ORM/ODM 庫的開銷(對象實例化、驗證等)。


如評論中所述,您可以pymongo.Collection使用Model._get_collection().


附加值是性能,缺點是如果任何文檔格式不正確(例如缺少字段、缺少默認值、錯誤類型、附加字段等),由于您繞過 MongoEngine,它無論如何都會被插入。以后通過模型與數(shù)據(jù)交互時,您可能會感到驚訝。


2)蒙古引擎


如果您有一個模型實例數(shù)組,那么您可以MongoEngine使用以下方法進行批量插入:


Model.objects.insert(your_array)

如果你可以用 構(gòu)造你的對象Model(**dict).save,那么這意味著你可以做


class Person(Document):

    name = StringField()

    age = IntField(default=32)


array = [{'name': 'John'}, {'name': 'Hulk', 'age': 100}]

person_instances = [Person(**data) for data in array]


Person.objects.insert(person_instances, load_bulk=False)


# Would insert the following

#[{'_id': ObjectId('...'), 'age': 32, 'name': 'John'},

# {'_id': ObjectId('...'), 'age': 100, 'name': 'Hulk'}]


優(yōu)點是它保證您插入的文檔的格式對您的 MongoEngine 模型有效(在我的示例中,這意味著考慮到age它不在字典中時的默認值)。缺點是存在性能成本。


簡而言之,這完全取決于您的主要需求是性能還是您可以忍受 MongoEngine 的開銷。


查看完整回答
反對 回復(fù) 2022-06-14
  • 1 回答
  • 0 關(guān)注
  • 294 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號