我有一个用户集合,其中每个用户都包含一个个人资料。每个配置文件可以包含应为该用户保存的电子邮件地址列表。使用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自动填充。
答案 0 :(得分:1)
我无法真正了解_id
这一代,MongoDB不应该这样做。
尽管如此,将findOneAndUpdate
选项设置为returnNewDocument
的{{1}}应该可以解决问题。在那边看看:https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
这将在更新后返回完整的文档。