我在 Ruby 中使用 mongoid gem。每次我在集合中更新、保存或插入相同的唯一文档时,Ruby 实例都会显示不同的 ID。例如,我有一个这样的脚本:
class User
include Mongoid::Document
field :email, type: String
field :name, type: String
index({ email: 1}, { unique: true })
create_indexes
end
u=User.new(email: 'test@testers.edu', name: "Mr. Testy")
u.upsert
puts u.to_json
我第一次针对空的或不存在的集合运行它时,我得到了这个输出
{"_id":"52097dee5feea8384a000001","email":"test@testers.edu","name":"Mr. Testy"}
如果我再次运行它,我会得到:
{"_id":"52097e805feea8575a000001","email":"test@testers.edu","name":"Mr. Testy"}
但是 MongoDB 中的文档仍然显示第一个 id (52097dee5feea8384a000001),所以我知道我们在同一条记录上操作。如果我总是使用 find_by 操作来跟踪 upsert,我会始终获得正确的 id,但是必须运行 upsert 后跟查询感觉效率低下。
难道我做错了什么?我担心我会在某人反复更新他的个人资料的操作中找回错误的 ID。