【问题标题】:Is it possible to update MongoDB String field with a String that is an ObjectId in Python是否可以使用 Python 中的 ObjectId 字符串更新 MongoDB 字符串字段
【发布时间】:2019-12-05 15:07:53
【问题描述】:

所以我在 MongoDB 集合中有一个字符串数组字段,我想添加一个作为 ObjectId 的字符串。它被添加但被保存为 ObjectId 而不是字符串。

                users_collection.update_one({
                    "_id": ObjectId(user['_id'])
                }, {
                    "$push": {
                        "profile.surveys.completedInTimeSurveyIDs": "5dc71ee34283e125a9edc96b"
                    }
                })

在集合文档中总是保存为:

但我希望它是:

【问题讨论】:

  • 那么,这两个值有什么区别呢?两者都显示相同的值和格式(请更正帖子)。在 mongo shell 中,当使用 $push 时,字符串 "5dc71ee34283e125a9edc96b" 作为 string 而不是对象添加到数组字段中。不,确定为什么它在您的情况下添加为ObjectId

标签: python-3.x mongodb objectid


【解决方案1】:

您可能已经在框架中定义了一个架构,并且您的框架知道路径引用的值的类型(这里 profile.surveys.completedInTimeSurveyIDs.$ 将被指定为 oid,因此您的字符串被如此转换)

替代方案是:

  • 根据您的规范设计您的架构(作为字符串)
  • 绕过框架并直接使用驱动程序(如果例外且可能)
  • 考虑真正存储一个 ObjectId 并在检索时调整您的代码(str() 如果需要)

我建议你做后者(如果你要聚合东西,查找,甚至填充,或者任何其他涉及你的数组元素的工作,你可能需要一个 ObjectId)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2022-10-21
    • 2017-05-31
    • 2020-07-15
    • 2020-05-21
    • 1970-01-01
    • 2013-09-19
    相关资源
    最近更新 更多