使用NodeJS的官方MongoDB驱动程序,我使用find({})方法提取文档,当尝试使用updateOne({_ id:doc._id},...)更新其中一个文档时,它什么都不做,我发现我需要使用{_id:new ObjectID(doc_id)}才能成功更新。我不明白这背后的想法,doc._id是我直接从数据库中提取的东西,在进程中发生了哪些变化使得它与数据库中的_id无法匹配?另外,我已经设法使用{_id:doc._id}成功找到了没有ObjectID构造函数的文档,只有updateOne方法不起作用。什么是ObjectID构造函数背后的逻辑?每次我使用从中提取的id与数据库进行通信时,是否需要使用它?例如,如果我想插入doc._id作为另一个文档的属性。
编辑:这里是代码的相关部分:
db.collection('students')
.insertOne(poolStudent, (err, docs)=>{
if(err){throw new Error(err)}
cb(docs.ops[0]) //where i get the student entity from
})
db.collection('students')
.updateOne({_id: student._id},
{$set: {rating: student.rating}}, function(err, r) {
if(err){console.log(err)}
console.log(r.result.n, r.result.nModified) //0, 0
})