获取添加到MongoDB的内部集合中的对象的ID

时间:2019-08-20 13:07:04

标签: python mongodb

我有一个用户集合,其中每个用户都包含一个个人资料。每个配置文件可以包含应为该用户保存的电子邮件地址列表。使用MongoDB,我可以执行以下操作将电子邮件添加到该列表中:

db.users.update_one( {'_id': ObjectId(userid)}, {'$push': {'profile.emails': email.__dict__}} )

这将为我想要的电子邮件生成一个_id。但是,据我所知,返回的UpdateResult不包含新添加项目的_id。我知道,由于电子邮件地址是唯一的,因此我可以查询该值,但是我认为不必执行第二个请求。有什么方法可以通过更新请求来请求此ID?

电子邮件有效负载如下:

{
    'address': 'jdoe@fake.email.com',
    'is_primary': true,
    '_id': null
}

,请求的结果(从服务器检索)为:

emails: [
    {
        'address': 'jdoe@fake.email.com',
        'is_primary': true,
        '_id': ObjectId("5d592f53d3f075f4acfdfab1")
    }
]

要完全清楚,电子邮件词典确实有一个_id字段,因此很有可能被MongoDB自动填充。

1 个答案:

答案 0 :(得分:1)

我无法真正了解_id这一代,MongoDB不应该这样做。

尽管如此,将findOneAndUpdate选项设置为returnNewDocument的{​​{1}}应该可以解决问题。在那边看看:https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/

这将在更新后返回完整的文档。