Mongo 对象彼此不相等

Mongo ObjectIDs not equal to eachother

new Mongo.ObjectID('18986769bd5eaaa42cb565b1') == new Mongo.ObjectID('18986769bd5eaaa42cb565b1')

returns 假

new Mongo.ObjectID('18986769bd5eaaa42cb565b1').toString() == new Mongo.ObjectID('18986769bd5eaaa42cb565b1').toString()

returns 真

这是一个错误、一个功能,还是我只需要使用 valueOf() 来处理它们,并在我需要使用数据库时将其从字符串转换回?

这是完全正常的,因为两个对象彼此不相等,即使它们包含相同的信息。您需要遍历所有属性并单独比较它们。

console.log({} === {});

例子

const obj1 = {id: 12345}
const obj2 = {id: 12345}

console.log(obj1 === obj2);

let same = true;
for(const prop in obj1){
  if(obj2.hasOwnProperty(prop) && obj1[prop] !== obj2[prop]){
      same = false;
      break;
  }
}

console.log(same);

这是因为 MongoDB 完全基于 JSON,所以即使特定信息本身是字符串,Mongo 仍然将其作为 JSON 目的。因此,您需要将其解析回字符串形式,以便您可以在其他地方使用它。

你应该看看这个 question,它可能会解决你的问题。基本上,他们说您需要使用您正在使用的 mongo 库提供的 equals 方法

ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() === "507c7f79bcf86cd7994f6c0e" //true

ObjectId("507c7f79bcf86cd7994f6c0e") === "507c7f79bcf86cd7994f6c0e" //false

ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() === ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() //true