例如:
我有一个“故事”集合,其中每个文档的形式均为:
{
'_id': <default>
'story': <some very long string which should be unique in the collection>
}
现在,每当我有一个故事时,如果它已经存在于“故事”中,则我需要它的“ _id”,否则插入一个具有“故事”字段集的新文档,并获取其“ _id”
我能想到的是:
story = "this is a very long story"
id = stories_col.find_one_and_update({
'story': story,
}, {
'story': story,
}, upsert=True, return_document=ReturnDocument.AFTER)['_id']
这不是效率低下,因为即使不需要它也会更新(修改)文档吗?可以提高效率吗
您曾经是那里的一分子,用于$setOnInsert
修改更新操作:
story = "this is a very long story"
id = stories_col.find_one_and_update({
'story': story,
}, {
'$setOnInsert': { 'story': story }
}, upsert=True, return_document=ReturnDocument.AFTER)
这意味着,如果文档匹配,则将不会执行“实际”写操作,因为此处唯一有效的操作是“插入时”。
通常建议“始终”使用适合于您的操作的更新操作符,因为在您使用“始终”时使用的“原始”对象会在没有它们的情况下替换文档中的“所有内容”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句