在PyMongo中,如何找到文档的_id(如果找到),否则插入并获取插入的文档的_id

例如:

我有一个“故事”集合,其中每个文档的形式均为:

{
  '_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果未找到 ID,猫鼬更新文档或插入新文档(Express REST API)

如果过滤器不返回任何内容,如何插入文档,否则用go替换mongodb中找到的文档?

获取文档ID(如果存在)或将其插入,并返回插入的文档ID(如果不存在)

在reactmongo中插入后如何获取文档对象ID?

如何使用 Pymongo 在文档中插入对象?

如何获取刚插入 MongoDB 的文档的 ID?(API)

如何获取插入文档 firebase-admin 的 id

如何在ArangoDB中的事务中访问插入的文档的_id

如果对象属性值未找到,如何使用聚合管道更新多个文档并在数组中插入项目

Pymongo:如何在文档中插入多个字段的数组?

从ID删除PyMongo中的文档

如何使用C#.Net中的InsertOneAsync将文档插入MongoDB并返回相同的文档或其ID

使用 pymongo 在 MongoDB 中插入文档

如果只知道一个字段(firestore)的数据,如何找到文档的id?

mongoDB c ++ 11驱动程序获取插入文档的ID

更新批处理文档(如果存在),否则插入MongoDB

在NodeJS中获取Mongo数据库中插入文档的_id

在MongoDB文档子文档数组中插入和返回子文档ID

如果文档存在,如何进行rethinkdb原子更新,否则插入?

使用自定义 ID 字段在 Elasticsearch 中插入文档

如果在表中未找到重复项,则插入;否则,更新

如何在FirestorePagingAdapter中获取文档ID?

Pymongo 使用字符串 ID 而不是 ObjectID 插入文档

Mongoddb插入文档后返回_id

如何在 Python 中使用自定义对象 ID 在 MongoDB 中插入文档

如何从文档快照获取Firestore文档ID?

Pymongo在子文档中通过_id查找

如果记录存在则返回ID,否则插入并返回ID

VBA Word:在Word文档中找到的文本之前插入文本